2011-04-14 129 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上下文中會違反參照完整性和關係約束。在這種情況下,只能將記錄直接插入主線程的上下文中。