【发布时间】:2023-03-08 16:15:01
【问题描述】:
我有一个包含核心数据和 icloud 的应用程序,允许用户在多个设备上使用相同的数据库。同步在大多数情况下都能完美运行,但有时不会,即只是跳过了一些事务。
当我检查控制台时,我收到错误消息:
__45-[PFUbiquityFilePresenter processPendingURLs]_block_invoke(439): CoreData: Ubiquity: Librarian 在开始下载时返回了一个严重错误 Error Domain=BRCloudDocsErrorDomain Code=5 “操作无法完成。(BRCloudDocsErrorDomain 错误 5 - URL 处没有文档)”
有趣的是,即使在同步工作时也会出现此消息。
代码符合 Apple 最新版本的“iCloud 核心数据编程指南”。 storeURL 编码如下:
NSURL *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *storeURL = [documentsDirectory URLByAppendingPathComponent:@"iCloudSample.sqlite"];
选项代码:
storeOptions = @{NSPersistentStoreUbiquitousContentNameKey: @"iCloudSampleStore" ,
NSPersistentStoreUbiquitousContentURLKey: @"iCloudSampleURL"};
商店代码:
NSPersistentStore *store = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:storeOptions
error:&error];
合并策略(MOC 在主队列上)
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
_managedObjectContext.mergePolicy = [[NSMergePolicy alloc]
initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType];
据我了解文档,实际上没有更多工作要做(?)。 但我想我错过了一些东西,有没有人知道要检查、改变、尝试什么? 有同样问题的人吗?任何想法表示赞赏!
【问题讨论】:
-
我也有同样的问题,不知道是什么问题:S
-
我刚收到 Apple 的反馈,我应该提交一份错误报告 - 让我们看看它是如何运作的,会及时通知您
-
我也有类似的问题。
-
看到同样的事情。在 Apple 修复此问题之前,我添加了一个“从云端重新加载”按钮。如果用户注意到他在一台设备上输入的内容在另一台设备上丢失,他可以简单地从 iCloud 重新加载所有内容。当然不是最优的,尤其是随着数据库的增长,但总比没有办法强制同步而只是丢失数据要好。