NSManagedObject
を更新するのに非常に単純なコードを使用していますが、保存によって永続ストア(SQLite)に変更されません。エラーメッセージはありません。ログは大丈夫ですので、少し失われています。コアデータの更新は保存されず、エラーも発生しません。なぜですか?
以下に示すように、私は可能な限りコードを縮小して問題を切り分けました。
ログでは、orderNumberとstatusが正しく設定されていることと、配列のデバッグ出力がすべて正しいことがわかりますが、単純な更新はエラーもなく失敗します。
+ (int) synchOrderWithStatusUpdate:(NSString *)orderNumber : (int)status {
if ([NWTillHelper isDebug] == 1) {
NSNumber *statusCheck = [NSNumber numberWithInt:status];
NSLog(@"WebServices:synchOrderWithStatusUpdate:ordernumber = %@, status = %d, status2 = %@", orderNumber, status, statusCheck);
}
synchOrderErrorCode = 0;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = appDelegate.persistentContainer.viewContext;
// *** The query for all tables uses orderNumber as selection so we set that up first for re use
NSPredicate *predicateOrderNumber =[NSPredicate predicateWithFormat:@"orderNumber like[cd] %@", [NWTillHelper getCurrentOrderNumber]];
NSFetchRequest *fetchRequestOh = [[NSFetchRequest alloc] initWithEntityName:@"OrderHead"];
NSFetchRequest *fetchRequestOrp = [[NSFetchRequest alloc] initWithEntityName:@"OrderRow"];
NSFetchRequest *fetchRequestTender = [[NSFetchRequest alloc] initWithEntityName:@"Tender"];
fetchRequestOh.predicate = predicateOrderNumber;
fetchRequestOrp.predicate = predicateOrderNumber;
fetchRequestTender.predicate = predicateOrderNumber;
fetchRequestOh.resultType = NSDictionaryResultType;
fetchRequestOrp.resultType = NSDictionaryResultType;
fetchRequestTender.resultType = NSDictionaryResultType;
NSError *errorOh = nil;
NSMutableArray *orderHeads = [[context executeFetchRequest:fetchRequestOh error:&errorOh] mutableCopy];
NSError *errorOrp = nil;
NSArray *orderRows = [[context executeFetchRequest:fetchRequestOrp error:&errorOrp] mutableCopy];
NSError *errorTender = nil;
NSArray *tenderRows = [[context executeFetchRequest:fetchRequestTender error:&errorTender] mutableCopy];
if ([NWTillHelper isDebug] == 1) {
NSLog(@"WebServices:synchOrderWithStatusUpdate:orderHeadsArray: %@", [orderHeads objectAtIndex:0]);
NSLog(@"WebServices:synchOrderWithStatusUpdate:orderRowsArray: %@", orderRows);
NSLog(@"WebServices:synchOrderWithStatusUpdate:tenderRowsArray: %@", tenderRows);
}
// *** Set the status before upload since this dictates what will happen in backend
// *** regardless if synch is successful or not
NSManagedObject *orderHeadObject = nil;
orderHeadObject = [orderHeads objectAtIndex:0];
[orderHeadObject setValue:[NSNumber numberWithInt:status] forKey:@"status"];
// Save the objects to persistent store
NSError *error = Nil;
[context save:&error];
NSLog(@"Jongel Error = %@", error);
if(error !=nil) {
if([NWTillHelper isDebug] == 1) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
synchOrderErrorCode = 99;
}
return 10101;
どのようなエラーが発生しましたか?どのエラーですか? – shallowThought
私の質問で述べたように、フェッチリクエストではなく、セーブ自体からでもなくエラーもなく、どちらのエラーでもNULLが表示され、コードはエラーなしで単純に終了します –
Ah。私はこれを逃した、申し訳ありません。 – shallowThought