我在使用核心数据时遇到奇怪的数据丢失问题。
我使用以下代码将记录保存到核心数据。
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 运行应用程序而不手动关闭应用程序,则数据不会被保留。
最佳答案
你没有保存上下文,所以你第二次丢失了数据。像这样更改您的代码
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];
}
希望对您有所帮助。
关于ios - 如果应用程序第二次运行,从 executeFetchRequest 返回的记录为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37788829/