我有一个带有核心数据和icloud的应用程序,允许用户在多个设备上使用相同的数据库.同步在大部分时间都是完美的,但有时它不会,即一些事务被简单地跳过.
当我检查控制台时,收到错误消息:
__45- [PFUbiquityFilePresenter processPendingURLs] _block_invoke(439):CoreData:Ubiquity:Librarian在开始下载时返回严重错误Error Domain = BRCloudDocsErrorDomain Code = 5“操作无法完成.(BRCloudDocsErrorDomain错误5 – URL上没有文档)”
有趣的是,即使同步有效,也会显示此消息.
该代码适用于Apple最新版本的“iCloud Core Data for Core Data”.
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];
据我了解文档,没有更多的事情要做(?).
但我想我错过了什么,有没有人知道要检查什么,改变,尝试?
谁有同样的问题?任何想法都表示赞赏!
最佳答案 我有同样的问题,通过删除persistentStore并在应用程序运行时再次添加它来解决它.在第一个设备中进行多次更改时始终存在同样的问题,第二个设备未获得所有更改.当applicationDidBecomeActive首先删除持久存储时,我使用以下代码:
var storeCoordinator:NSPersistentStoreCoordinator = persistentStoreCoordinator!
var store:NSPersistentStore = storeCoordinator.persistentStores[0] as! NSPersistentStore
var storeURL:NSURL = store.URL!
storeCoordinator.removePersistentStore(store, error: nil)
NSFileManager.defaultManager().removeItemAtPath(storeURL.path!, error: nil)
接下来我继续再次添加persistentStore.然后我收到了所有通知,因为它是安装后的第一次运行,但同步完整数据.它总是有效,但我不知道这是否是处理问题的正确方法.
我相信在第一个设备中所做的所有更改总是到达第二个设备,但由于一些奇怪的原因,它们不会完全与本地核心数据合并.我对iCloud-CoreData问题做了一些奇怪的观察:
https://stackoverflow.com/questions/32084952/core-data-to-icloud-doesnt-sync-all-changes
我希望它有所帮助.