【发布时间】:2015-02-12 15:13:08
【问题描述】:
我有一个包含 Today Extension 的 Cocoa 应用程序。我使用 Core Data (SQLite) 在这两者之间存储和共享数据。两个应用程序共享一个组容器以访问相同的数据存储。这两个应用程序不仅读取而且写入数据,这会导致问题。有时,任何一个应用程序都会引发错误。到目前为止,我遇到了三种不同的错误类型:
无法合并更改
CoreDragRemoveTrackingHandler 中的错误:-1856
CoreDragRemoveReceiveHandler 中的错误:-1856
CoreData: error: NULL _cd_rawData 但对象没有变成故障
CoreDragRemoveReceiveHandler 中的错误:-1856 CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。这通常是 NSManagedObjectContextObjectsDidChangeNotification 观察者中的一个错误。 -[__NSCFSet addObject:]: 尝试用 userInfo (null) 插入 nil
从 iOS 开发库中的文章 Sharing Data with Your Containing App(这不是 iOS/Cocoa-Touch,而是 OSX/Cocoa - 但同样适用)我了解到:
为避免数据损坏,您必须同步数据访问。使用 Core Data、SQLite 或 Posix 锁来帮助协调共享容器中的数据访问。
有人可以指点我一个方向吗?这到底是什么意思?
【问题讨论】:
-
如果您编辑问题以包含发生这些异常的代码行,这将有所帮助。此外,complete 错误消息(Core Data 可能会说“无法合并更改”,但它会说的远不止这些)。
-
异常未绑定到我的代码的任何行。发生这种情况时,一些神秘的胡言乱语可能会以绿色突出显示。我唯一能展示的是
mangedObjectContext.save(&error),这会导致异常和/或返回包含“无法合并更改”的false和error。error不包含除此之外的任何内容。但是我的问题更多的是针对一般描述,而不是针对我的代码。用上面的引述解释了苹果的意思。