iOS核心数据损坏?

3
这是一个比较普遍的问题,目前我没有任何确凿的证据。 我有一个iPhone应用程序,大约有20,000个用户。它允许用户互相发送消息,并将这些消息保存在核心数据中。它在核心数据中保存的唯一其他内容是用户配置文件,本地副本和服务器上的副本。我有少数用户抱怨他们收到消息但没有显示出来,当他们发送消息时(它会立即进入核心数据然后显示在屏幕上),它立即消失了。除了完全恢复似乎没有什么可以解决它,而且据我所知,即使恢复涉及到他们恢复刚刚备份的数据也无法解决它。我的第一个想法是核心数据必须以某种方式变得损坏...但是他们尝试发送的消息实际上确实发送了,如果他们的本地配置文件也已经损坏,那么这是不可能的。我从未能够重新创建它,也没有找到面对面谁有类似问题的人。是否有人对可能导致这种情况发生的核心数据有任何建议,这样我就可以开始尝试跟踪问题?我估计它正在发生1%的用户身上。再次抱歉,问题很普遍,但现在这是我所拥有的一切!谢谢。
3个回答

1

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

错误消息中的关键短语是NSMergeConflict

错误域=NSCocoaErrorDomain Code=133020“操作无法完成。(Cocoa错误133020。)”UserInfo=0x1544c7d0 {冲突列表= "NSMergeConflict(0xc489f40)适用于具有objectID'0xd82b7c ...的NSManagedObject(0xd833ca0)

不确定这是否真正有所帮助,但至少它告诉您可能出了什么问题...


0

这会影响到用户从他们设置账户的那一刻开始吗?可能与他们的用户名/ID/个人信息有关吗?

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

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

祝好运。


抱歉回复慢了,我出差几天了!不,它不会影响用户创建账户的那一刻。他们创建账户后一切正常,持续数周甚至数月,然后突然问题出现。应用程序联系服务器,将新消息下载到核心数据中,然后无法从核心数据中检索它们。然后所有其他症状就如所述(应用程序被删除时数据未从核心数据中清除等)。我使用完全相同的详细信息创建了帐户,甚至将其消息下载到我的设备上,但一切都很好! - Steven Elliott
1
他们的设备可能内存不足吗?Core Data 文件可能会以块增长 - 如果设备没有足够的内存进行分配,我不知道会发生什么。听起来可能是罪魁祸首。当您进行测试时 - 您是否将他们的整个 Core-Data 数据库下载到您的设备上?还是只有那些引起问题的消息 - 数据库大小也可能有限制。但如果只是文本,我真的看不出会发生什么。 - Michael Kernahan

0
有人对 Core Data 中可能导致这种情况的问题有什么建议吗?这样我就可以开始尝试追踪问题了。
关于这个问题,有无数种不同的可能性。
你真正的问题在于你试图以推测的方式进行调试。为了正确地修复此错误,您首先需要知道如何重现此错误。没有其他方法可以知道在尝试了某些内容后是否已经解决了它。
我不会从责怪底层框架(如 Core Data)开始。很可能是您的程序丢失了数据。从这个假设开始。

我的第一反应是核心数据可能以某种方式损坏了...但他们尝试发送的消息实际上确实发送了,如果他们的本地配置文件也已经损坏,这是不可能的。我并不是想责怪底层框架。我希望得到一些关于什么会导致我的核心数据出现问题的建议,例如,如果我的代码正在访问核心数据而电池耗尽了,它会处理吗?如果我知道核心数据中常见的漏洞会导致问题,那么我可以尝试重现错误并修复它。 - Steven Elliott
@Steven,帮助你解决问题几乎是不可能的。在修复问题之前,你必须首先找出如何重现错误。世界上所有的猜测可能都是浪费时间。 - Shaggy Frog
我同意猜测并不是最好的起点,但有时它是你唯一可以依靠的!我已经能够从一个乐于助人的用户那里找到更多信息,我正在编辑上面的问题以包含它。谢谢。 - Steven Elliott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接