ios – iCloud核心数据“URL上没有文档”

我有一个带有核心数据和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

我希望它有所帮助.

点赞