我在使用核心数据时遇到了奇怪的数据丢失。
我使用以下代码将记录保存到核心数据。
for (int i = 0; i < [domains count]; i++){
NSString *is_active = [[domains objectAtIndex:i] objectForKey:@"is_active"];
NSString *domain_id = [[domains objectAtIndex:i] objectForKey:@"domain_id"];
NSString *domain_name = [[domains objectAtIndex:i] objectForKey:@"domain_name"];
[context performBlockAndWait:^{
NSManagedObject *domain = [NSEntityDescription insertNewObjectForEntityForName:@"Domains" inManagedObjectContext:context];
[domain setValue:is_active forKey:@"isActive"];
[domain setValue:domain_id forKey:@"domainId"];
[domain setValue:domain_name forKey:@"domainName"];
}];
}
我使用以下代码来获取记录。
NSError *error;
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Domains"];
self.domainContext = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
NSLog(@"domain context %@",self.domainContext);
我正在使用真实设备进行测试。
如果我是第一次在我的设备中运行应用程序,self.domainContext中有一些内容。如果我第二次运行应用程序而不手动关闭应用程序,self.domainContext没有任何内容。但是,如果我手动关闭应用程序并重新运行应用程序,则self.domainContext已保存内容。为什么会这样?仅当我手动关闭我的应用程序时,数据才会持久保存到磁盘。如果我从xcode运行应用程序而不手动关闭我的应用程序,则数据不会保留。
答案 0 :(得分:1)
您尚未保存上下文。因此您第二次丢失了数据。像这样改变你的代码
for (int i = 0; i < [domains count]; i++){
NSString *is_active = [[domains objectAtIndex:i] objectForKey:@"is_active"];
NSString *domain_id = [[domains objectAtIndex:i] objectForKey:@"domain_id"];
NSString *domain_name = [[domains objectAtIndex:i] objectForKey:@"domain_name"];
[context performBlockAndWait:^{
NSManagedObject *domain = [NSEntityDescription insertNewObjectForEntityForName:@"Domains" inManagedObjectContext:context];
[domain setValue:is_active forKey:@"isActive"];
[domain setValue:domain_id forKey:@"domainId"];
[domain setValue:domain_name forKey:@"domainName"];
}];
NSError *error = nil;
[context save:&error];
}
希望这会对你有所帮助。