Core Data / NSTextView仅在保存后中断

时间:2011-05-05 03:34:49

标签: cocoa core-data nstextview nsmanagedobjectcontext core-text

我们在核心数据托管对象上下文中保存了一个NSTextView和一些有关其内容的数据。托管对象上下文保留在内存中时,一切都很好。但是当我们保存它时,我们会得到非常奇怪的获取请求行为。

例如,我们运行一个获取请求,要求textLocation小于或等于15的所有元素。我们返回的数组中的第一个对象的textLocation为16.

我知道我在这里找不到明确的答案,因为代码相当复杂。但有谁知道这个问题有什么味道?

我的想法是,我们在某种程度上没有在保存后获得与NSTextView同步的正确MOC?什么可以改变这打破了这个?

感谢。

2 个答案:

答案 0 :(得分:0)

  

例如,我们运行获取请求   要求所有元素都有一个   textLocation小于或等于15。   我们得到的数组中的第一个对象   back的textLocation为16。

真的,获得这个的唯一方法是(以可能性的相反顺序):

  1. 理解属性的定义,以便您认为您正在保存一种类型的数字信息,但实际上是在保存另一种数据信息。
  2. 你已经修改了谓词,以便它实际上寻找16或更高的值。 (您可以针对其核心与核心数据实体具有相同名称的字典数组测试谓词。)
  3. 为了在UI或日志记录中显示,在数字和字符串之间进行转换时出错。
  4. 我会从(3)自己开始,因为它似乎更常见,直到你确认你没有显示问题,你无法诊断其他问题。

答案 1 :(得分:0)

我终于设法弄清楚发生了什么。我正在使用setPrimitiveValue设置textLocation ...只是因为我不希望触发通知。事实证明这是一个非常糟糕的主意,因为Core Data并不知道价值已发生变化。它仍然认为价值是15而不是16。

让这成为一个教训:永远不要绕过KVO,除非您在管理对象中,并且知道自己在做什么!