我想我理解错误信息:CoreData无法解决错误,但我不确定应该如何处理它.
我们有一个应用程序,我们使用Core Data来保存从JSON服务返回的数据.今天我正在做以下事情.
问题是; 即使我不使用多线程,当HTTP请求删除我的UI保留的托管对象时,我有时会收到错误.我试图用returnsObjectsAsFaults获取对象为NO.我以为我可以访问托管对象的所有关系和属性,即使它已被删除(只要我的UI保留了它).
我该如何解决这个问题?
我以为我可以使用单独的NSManagedObjectContext进行读写.我做了这个测试:
MyAuthorMO *authorUpdate = [[MyAuthorMO alloc] init]; // I have made this init insert the object into the updateContext
authorUpdate.firstname = @"Hans";
authorUpdate.lastname = @"Wittenberg";
authorUpdate.email = @"Hans@somedomain.no";
NSManagedObjectContext *updateContext = [[MyCoreManager getInstance] managedObjectContext];
NSError *error = nil;
[updateContext save:&error];
NSManagedObjectContext *readContext = [[MyCoreManager getInstance] readOnlyContext];
NSFetchRequest *fetchRequest = [managedObjectModel fetchRequestFromTemplateWithName:@"authorByEmail" substitutionVariables:[NSDictionary dictionaryWithObject:@"Hans@somedomain.no" forKey:@"EMAIL"]];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSArray *authors = [readContext executeFetchRequest:fetchRequest error:&error];
MyAuthorMO * readAuthor = [authors objectAtIndex:0];
// Delete the author with update context:
[updateContext deleteObject:authorUpdate];
[updateContext save:&error];
NSLog(@"Author: %@ %@, (%@)", readAuthor.firstname, readAuthor.lastname, readAuthor.email);
Run Code Online (Sandbox Code Playgroud)
只要我使用readContext进行获取,就会输出日志.如果我使用updateContext进行提取,我会得到一个例外.这看起来很有希望,但我担心我会在以后遇到问题.迟早我可能会尝试访问一个未完全取出的属性(故障).我怎样才能实现我正在寻找的行为?
Tec*_*Zen 14
您不应保留上下文已释放的托管对象.让上下文为您做到这一点.
问题是托管对象可以作为故障或实现对象存在.保留一个时,可能会保留不包含数据的故障.即使您确实保留了实际对象,一旦将对象与其上下文分离,该对象可能无法正常运行.
为了处理您的场景,您需要UI的上下文,然后是服务器的上下文.在任一上下文进行更改之后,您应该合并上下文以确保两者都相对于商店进行了适当更新.
您的UI应配置为反映数据模型的状态,您不应该让数据模型的某些部分依赖于UI的状态.
| 归档时间: |
|
| 查看次数: |
10123 次 |
| 最近记录: |