管理対象オブジェクトコンテキストへの変更を保存するときにエラーが発生しますが、エラーハンドラに問題があります。エラーはゼロであるため、有用な情報が得られません。エラーハンドラには2つのバージョンがあります。これはXcodeによって生成され、機能します(つまり、ログメッセージに有用なエラー情報が含まれています)。
AppDelegate.c
- (void)saveContext
{
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
{
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
*/
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
しかし、成功/失敗(最終的には、今のところ中止しているだけです)+エラー情報を呼び出し元に返すことができるようにしたいので、これは機能しません(エラーはゼロであるため、有用ではありません)エラーに関する情報)。
Database.h
+ (BOOL) commit:(NSError **)error;
Database.c
+ (BOOL) commit:(NSError **)error {
AppDelegate *appDelegate = (AppDelegate*) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
if (managedObjectContext != nil)
{
if ([managedObjectContext hasChanges] && ![managedObjectContext save:error])
{
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
*/
if (error == nil) {
NSLog(@"Unresolved error");
abort();
} else {
NSLog(@"Unresolved error %@, %@", *error, [*error userInfo]);
abort();
//return FALSE;
}
}
return TRUE;
}
return FALSE;
}
私の問題はポインタにあり、リダイレクトのレイヤーで迷子になっていると確信しています。
[編集:] commitを呼び出すコード:
[Database commit:nil];
commitメソッドの先頭にこのようなものを追加する必要があるかどうか疑問に思いますが、ポインターについてはよくわかりません。
if (error == nil) {
error = [[NSError alloc] init];
}