什么是导致这个核心数据输出的差异?
我有一个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商店。
希望有所帮助。