我有一个NSManagedObject,它在程序开始时初始化了一些属性。当我稍后引用此对象时,它似乎出现故障,并且无法访问这些属性。我不确定我需要做什么。
这与添加到程序中的新功能有关,该功能已通过其他所有方式顺利运行核心数据。
这是一段代码片段,它被初始化为单例的属性值。 (我的代码的许多部分都可以访问该单例):
favoritesCollection = [[SearchTerms alloc] initWithEntity:[NSEntityDescription entityForName:@"SearchTerms" inManagedObjectContext:moc] insertIntoManagedObjectContext:moc];
favoritesCollection.keywords = @"Favorites List";
favoritesCollection.isFavoritesCollection = [NSNumber numberWithBool:YES];
favoritesCollection.dateOfSearch = [NSDate NSCExtendedDateWithNaturalLanguageString:@"4000"];
favoritesCollection.pinColorIndex = 0;
[moc save:&error];
NSLog(@"(favoritesCollection) = %@", favoritesCollection);
}
return favoritesCollection;
当我使用NSLog查看favoritesCollection时,我看到了这一点(我添加了一些换行符以便于阅读):
(favoritesCollection) =
<SearchTerms: 0x5c28820>
(entity: SearchTerms; id: 0x5a6df90
<x-coredata://3936E19F-C0D0-4587-95B6-AA420F75BF78/SearchTerms/p33> ;
data: {
dateOfSearch = "4000-09-25 12:00:00 -0800";...*more things after this*
返回后,另一个NSLog显示内容完好无损。
当我稍后提到这个实例时,我可以在调试器中看到这个:
<SearchTerms: 0x5c28820>
(entity: SearchTerms; id: 0x5a6df90
<x-coredata://3936E19F-C0D0-4587-95B6-AA420F75BF78/SearchTerms/p33> ;
data: <fault>)
就是这样。
所以我相信该对象被保留(我明确地将其保留在返回的位置)。我有僵尸,它看起来不像僵尸。
程序中只有一个managedObjectContext,在单例中维护。
那么发生了什么,以及如何获取已保存的属性?
答案 0 :(得分:1)
你的对象没有任何问题,我认为你可能在这里误解了“错误”的含义。
来自Apple的文档:
“故障是核心数据用来减少你的机制的一种机制 应用程序的内存使用情况......“
尝试访问任何对象的属性后,它将在数据库中找到所有对象的属性。
答案 1 :(得分:0)
错误是CoreData与其他实体之间存在松散链接的方式。只需通过属性或valueGorKey访问这些值,您就会看到它们及时填充。
答案 2 :(得分:0)
我回到这里有点晚了,但我发现程序中的一些步骤出了故障。我没有删除数据库内容(我现在在启动时做的事情,然后创建和添加这个实体),而是创建并添加了实体,然后删除了数据库内容。
指向favoritesCollection实体的指针在程序的生命周期内保留,所以我希望它能够在创建后的任何时候看到它的内容。
来自核心数据编程指南
故障处理是透明的 - 您不必执行提取 实现了一个错误。如果在某个阶段出现故障的持久性 访问对象,然后Core Data自动检索数据 对象并初始化对象(请参阅NSManagedObject类 引用不会导致错误的方法列表)。 这个过程通常被称为触发故障。
核心数据会在必要时自动触发故障(持久性故障时) 访问过错的属性。)
通过阅读编程指南,我可以看出,在查看任何特定实体时,查看关系上的错误(指向其他实体的链接)是正常的。但是没有提到持久属性值的缺点。我相信,一般来说,如果对象在内存中,那么它的属性不应该是错误的,但它的关系可能是错误的。
favoritesCollection实体完全出错(属性和关系)并且故障没有得到解决的事实揭示了一个问题。在这种情况下,它与数据库中不再存在的实体一致。