2011-04-14 135 views
3

当我尝试保存由SQLite支持的托管对象上下文时,有时会出现错误。核心数据SQLite约束失败

Error Domain=NSCocoaErrorDomain Code=256 "The operation couldn’t be completed. (Cocoa error 256.)" UserInfo=0x280170 {NSFilePath=/var/mobile/Applications/7773BDBD-C502-4E21-9632-FA36A109BF6E/Documents/Social.sqlite, NSUnderlyingException=error during SQL execution : constraint failed}, { NSFilePath = "/var/mobile/Applications/7773BDBD-C502-4E21-9632-FA36A109BF6E/Documents/Social.sqlite"; 
NSUnderlyingException = "error during SQL execution : constraint failed"; 
} 

这并不与二进制数据存储发生了,当我在短时间内改变一个特定的实体和保存方面多次才会发生。任何人都可以提出一种方法来调试呢?我已经用sqlite3查看了.sqlite文件,并且没有跳出。我不认为它是一个明确的核心数据约束违规(空要求值或类似的),因为我看到二进制存储没有错误。该程序非常复杂(在多个线程中有多个上下文),并且我无法通过简单的代码在此处显示错误。有关如何从核心数据背后注销sqlite实例的任何想法?

回答

1

难道这个保存是发生在一个单独的线程的上下文中,而这个线程并没有意识到它所约束的父亲关系(这就是它读取的方式)。

ie一个父记录已被保存到它的线程3上下文,然后与主线程的上下文合并,但子记录在线程5(或任何其他线程3)上下文,它不知道线程3对主要上下文所做的更改。

将该记录插入到线程5上下文中会违反参照完整性和关系约束。在这种情况下,只能将记录直接插入主线程的上下文中。