什么是导致这个核心数据输出的差异?

我有一个NSFetchedResultsController,我第一次运行我的应用程序时返回0节,但是当我closures并重新加载应用程序后,正确的节数很难。

我注意到,如果我NSLog数组[[self.fetchedResultsController fetchedObjects]描述],我得到一个稍微不同的结果之间的第一次和以后,我希望这将帮助我找出整体问题。

第一次运行:

"<Contact: 0x1fc7a000> (entity: Contact; id: 0x1fc79cb0 <x-coredata:///Contact/tC060241D-2C37-4F78-AA69-5FBE3CB9DDFB364> ; data: {\n email = nil;\n emails = (\n );\n name = \"AIB Dundrum\";\n nameInitial = A;\n parseID = nil;\n phoneNumber = 012983777;\n signedUp = 0;\n})" 

第二次运行:

 "<Contact: 0x1e35f3f0> (entity: Contact; id: 0x1e2ab020 <x-coredata://FD1A50BA-9A08-452D-B4B4-2072FA1B190C/Contact/p337> ; data: <fault>)" 

任何人都可以向我解释这些输出之间的差异,为什么第二次运行应用程序时数据出现故障,我怎样才能在第一次做这些事情呢?

谢谢

在第二次运行中,你看到了一个错误 ,这意味着Core Data知道这个对象存在于图中,但除此之外,它什么都不知道。 它需要返回到持久性存储以获取其他信息,通过使用故障对象Core Data可以限制对象图在内存中的大小。 一种“引发故障”的方法是访问对象的一个​​属性。 您可以在debugging器中通过在loggingContact NSManagedObject的说明之前放置一个断点来完成此操作。 一旦中断点被击中,在debugging器控制台中键入以下内容。

po [myContact willAccessValueForKey:nil]这应该触发错误,然后在logging描述时,将看不到data: <fault> ,而是所有属性及其值,这就是您在“First Run ”。

我不确定的一件事是为什么你看到x-coredata:///Contact/tC060241D-2C37-4F78-AA69-5FBE3CB9DDFB364在第一次运行和x-coredata://FD1A50BA-9A08-452D-B4B4-2072FA1B190C/Contact/p337在二跑。 我感到非常自信地说,似乎在First Run中联系人还没有被保存,在Second Run中看到的p337实际上代表了支持持久性存储中的loggingID。 你不应该依赖这个ID,而是依靠我的debugging和分析经验,这是我一直看到的。 这就是说,这就是我相信联系人login第一次运行尚未保存在persisten商店。

希望有所帮助。