おもちゃの iOS プロジェクトでは、MagicalRecord を使用して、アプリケーション デリゲートで CoreData スタックをセットアップしています。次のコードを使用します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[MagicalRecord setupCoreDataStackWithStoreNamed:@"ToyProject.sqlite"];
[[NSManagedObjectContext MR_defaultContext] setUndoManager:[[NSUndoManager alloc] init]];
...
}
私が書いている NSManagedObject のサブクラスがあり (NSRailsManagedObject - 私は NSRails をフォークし、CoreData サポートを追加しました)、それに saveContext メソッドを与えました:
- (void)saveContext {
dispatch_async(dispatch_get_main_queue(), ^{
@try {
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Failed to save core data: %@", [error localizedDescription]);
} else {
NSLog(@"\"Successfully\" saved your data.");
}
}
@catch (NSException *exception) {
NSLog(@"Couldn't save your data! Try again later :(");
}
@finally {
NSLog(@"Look, I don't know what else to tell you, mang.");
}
});
}
このメソッドを使用してこのクラスのサブクラスを保存しようとすると、エラーは発生せず、表向きは保存に成功します。ただし、アプリケーションの次の実行時には、前回の実行で存在していたデータは存在しません。代わりに、saveContext メソッドに次のコードが含まれている場合、問題なく動作します。
- (void)saveContext {
[[NSManagedObjectContext MR_defaultContext] MR_save];
}
さらに、2 つをハイブリッド化すると、保存してもデータが保持されません。
- (void)saveContext {
dispatch_async(dispatch_get_main_queue(), ^{
@try {
NSError *error = nil;
if (![[NSManagedObjectContext MR_defaultContext] save:&error]) {
NSLog(@"Failed to save core data: %@", [error localizedDescription]);
} else {
NSLog(@"\"Successfully\" saved your data.");
}
}
@catch (NSException *exception) {
NSLog(@"Couldn't save your data! Try again later :(");
}
@finally {
NSLog(@"Look, I don't know what else to tell you, mang.");
}
});
}
他に何を試すべきか本当にわかりません。誰かが私を正しい方向に向けることができますか?