iOS核心数据损坏?

时间:2010-10-28 13:11:55

标签: iphone core-data ios ios4

这是一个相当普遍的问题,因为我没有任何可靠的证据。

我有一个拥有大约20,000名用户的iPhone应用程序。它允许用户相互发送消息,并将这些消息保存在核心数据中。它在核心数据中保存的唯一另一件事是用户配置文件,本地副本和服务器上的副本。

我有一小部分用户抱怨他们收到消息但没有显示,当他们发送消息时(立即进入核心数据然后在屏幕上显示)它会立即消失。除了完整恢复之外什么都没有解决它,而且从我可以收集到的内容来看,即使恢复涉及他们恢复他们刚刚创建的备份也无法修复它。

我的第一个想法是,核心数据必定会以某种方式被破坏......但是他们尝试发送的消息确实会发送,如果他们的本地配置文件也已损坏,这将是不可能的。

我从来没有能够重新创建它,或者发现任何面对类似问题的人。

有没有人对可能导致这种情况的核心数据会发生什么有任何建议,所以我可以开始尝试追踪问题了?我估计大约1%的用户会发生这种情况。

再一次,对于这个问题的普遍性感到抱歉,但这就是我现在必须要做的一切!

由于

**编辑

只是澄清一下,删除应用程序并重新安装它,并不能解决问题。

**编辑

我刚从患有此问题的用户那里得到了更多信息......在应用程序被删除并重新安装之后,我的应用程序保存在核心数据中的信息仍然存在。在过去的一年中,我已经删除并重新安装了我的应用程序数百次,在无数不同的设备上,每次删除和重新安装时,存储在核心数据中的所有先前数据都被完全删除..但对于这些用户,这没有发生。这听起来像是一个基本上需要恢复的iPhone问题吗?

**编辑03/12/2010

最后!我有一些真正可靠的信息可供使用。我添加了flurry到我的最新版本,所以我可以跟踪任何核心数据错误消息,并能够将收到的错误与用户ID相关联,我知道这个问题正在遇到问题......

错误是:“消息:错误域= NSCocoaErrorDomain代码= 133020”操作无法完成。(Cocoa错误133020.)'UserInfo = 0x39c7c0 {conflictList =(NSMergeConflict(0x39c700)for NSManagedObject(0x38ad00) with objectID'0x375c30

不幸的是,错误被修剪了。 Flurry必须限制它可以传递的消息的大小。

我现在无法访问我的mac和代码,我会尽快开始调查并回复一些源代码和我的任何调查结果。

3 个答案:

答案 0 :(得分:1)

我现在遇到这样的问题。到目前为止,我已经发现在两个NSManagedObjectContext-s中修改了相同的对象。对象X具有(至少)两个持久性属性,a和b,一个线程更改a,另一个线程更改b,CoreData无法合并。

错误讯息中的关键词是 NSMergeConflict

错误Domain = NSCocoaErrorDomain Code = 133020“操作无法完成。(Cocoa error 133020.)”UserInfo = 0x1544c7d0 {conflictList =(     “ NSMergeConflict (0xc489f40)for NSManagedObject(0xd833ca0),objectID为'0xd82b7c ...

不确定这确实有帮助,但至少它告诉你可能会出现什么问题......

答案 1 :(得分:0)

  

有没有人对可能导致这种情况的核心数据会发生什么有任何建议,以便我可以开始尝试追踪问题?

关于大量不同的事情。

您真正的问题是您正在尝试以投机方式进行调试。 要正确修复此错误,您首先需要知道如何重现该错误。没有其他方法可以知道您在尝试过之后是否修复了它。

我不会首先指责像Core Data这样的底层框架。赔率是你的程序是丢失数据的人。从这个假设开始。

答案 2 :(得分:0)

从他们设置帐户的那一刻起,它是否会影响这些用户?可能与他们的用户名/身份/个人信息有关吗?

如果完全删除应用程序并重新安装并不能解决问题,那么我对它如何成为核心数据感到茫然 - 正如您自己所说,我经常这样做并且每次都会删除所有核心数据。因此,如果它是核心数据损坏,则必须在构建核心数据而不是数据库本身。我认为只有安装你的应用程序的人才会遇到核心数据被保留的问题。

如果您与遇到此问题的用户有联系,我会让他们尝试创建一个“安全且正常”的新用户名。

祝你好运。