[英]NSManagedObjectContext does not saved when the App Quits & Relaunches
I could not find why the core data NSManagedObjectContext not get saved when my app quits and re-launch. 我找不到为什么我的应用程序退出并重新启动时无法保存核心数据NSManagedObjectContext的原因。 Every time when i quit the app and re-lanch, database is empty
每次我退出应用程序并重新分配时,数据库为空
AppDelegate AppDelegate中
- (void)applicationWillTerminate:(UIApplication *)application
{
[[ShowScreenManager sharedInstance] reset];
// Saves changes in the application's managed object context before the application terminates.
[self saveContext];
[self.tracker set:kGAISessionControl value:@"end"];
} }
- (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();
}
}
}
Save to core data 保存到核心数据
// get manageObjectContext
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"EntityName"
inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
fetchRequest = nil;
if(fetchedObjects.count == 0){
// insert
anItem = [NSEntityDescription
insertNewObjectForEntityForName:@"SomeName"
inManagedObjectContext:context];
}
else{
// update
anItem = [fetchedObjects objectAtIndex:0];
}
aSequnce.all = strSequnce;
// save context
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
}
applicationWillTerminate:
is basically never used in version of iOS after 4 (when background running came in). applicationWillTerminate:
基本上从4(在进入后台运行时)之后的iOS版本中就不再使用。 You should not rely on it for anything. 您不应该依赖它做任何事情。
You should generally be saving the context after updates rather than waiting for app termination. 通常,您应该在更新后保存上下文,而不是等待应用终止。
You can move your logic to applicationDidEnterBackground:
but this still won't be called if your app crashes or is terminated from Xcode. 您可以将逻辑移至
applicationDidEnterBackground:
但是,如果您的应用崩溃或被Xcode终止,则不会调用该逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.