我使用的是iOS 5.0中的UIManagedDocument,在模拟器上运行该应用程序,使用的是OSX10.6下的XCode 4.2。有问题的代码如下所示:
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.photoDatabase.fileURL path]]) {
// does not exist on disk, so create it
[self.photoDatabase saveToURL:self.photoDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
[self setupFetchedResultsController];
[self fetchFlickrDataIntoDocument:self.photoDatabase];
}];
} else if (self.photoDatabase.documentState == UIDocumentStateClosed) {
// exists on disk, but we need to open it
// *** the following line generates the message ***
[self.photoDatabase openWithCompletionHandler:^(BOOL success) {
//[self setupFetchedResultsController];
}];
} else if (self.photoDatabase.documentState == UIDocumentStateNormal) {
// already open and ready to use
[self setupFetchedResultsController];
}运行标记的行会在日志中创建以下消息:
2012-01-10 22:33:17.109 Photomania[5149:4803] NSFileCoordinator: A surprising server error was signaled. Details: Connection invalid消息发送后,UIManagedDocument可能会工作,也可能不会工作--我还没有发现决定这一点的情况。
我非常确定代码是正确的,因为它实际上是斯坦福大学CS193p课程中的代码示例之一。整个示例可以在他们的网站上下载,直接链接到代码:http://www.stanford.edu/class/cs193p/cgi-bin/drupal/system/files/sample_code/Photomania_0.zip
此外,代码在设备本身上运行良好,不会生成“令人惊讶的”消息,也不会运行随后出现的所有代码。
我在谷歌上没有找到任何东西,苹果开发人员页面上也没有。重新启动模拟器或XCode,或者同时重新安装它们并不会改变行为。
有什么想法吗?
发布于 2012-03-02 02:19:31
我只能说这种情况在我身上已经发生过几次了。对我来说,在更新dataModel之后我很懒,到目前为止,每次我收到这个错误都是因为我更改了我的数据模型。通常,我需要做的就是从模拟器中删除我的应用程序,然后重新运行它,结果总是很好。希望这能对外面的人有所帮助。
发布于 2012-03-07 05:54:14
我想我已经找到答案了。看起来只有在模拟器上几秒钟后,UIManagedDocument的自动保存才开始生效。
因此,我在模拟器上最小化了应用程序,按下主页按钮,然后单击图标再次将其最大化。然后我在模拟器中终止了应用程序。
当我重新启动应用程序时,数据库已经加载。错误仍然出现-因为文档处于“已关闭”状态(这是正常的-这就是为什么CS193P要求调用openWithCompletionHandler),但我的启动数据被保留。不幸的是,在终止应用程序之前,我必须执行最小化/最大化例程,否则这些更改将在下次启动时被丢弃。
您能确认这是您能够重新创建的行为吗?至少为了测试的目的,这应该是一个足够好的技巧来使用。
发布于 2012-02-19 14:42:12
尝试升级到最新的iOS 5.1。我不认为带有iCloud的UIManagedDocument在5.0中能够可靠地工作。这是我的经验。
https://stackoverflow.com/questions/8810952
复制相似问题