2

我正在尝试在我的 iPhone 应用程序中使用由 Core Data 管理并与 iCloud 同步的数据库。

我使用了 WWDC 2012 中的示例代码,并设法使其几乎正常工作。

另外,我的数据库很简单:只有一种对象,没有关系。

两个设备可以通过 iCloud 进行通信,但是,这个小场景失败了:

  • 在设备 A 上创建一个对象
  • 等待对象出现在设备 B 上
  • 修改设备A上的对象
  • 修改设备 B 上的对象
  • 当设备 B 知道更新时,它会尝试合并更改并且应用程序崩溃。

是的,应用程序崩溃了。我的数据库中只有一个对象,Core Data 似乎无法解决一点点冲突。

以下是我创建持久存储的方式以及使用哪些选项:

NSDictionary *options = @{NSPersistentStoreUbiquitousContentNameKey : contentName,
NSPersistentStoreUbiquitousContentURLKey : iCloudLogsPath};
self.iCloudStore = [self.persistentStoreCoordinator  
    addPersistentStoreWithType:NSSQLiteStoreType
    configuration:nil
    URL:iCloudData
    options:options
    error:&error];

这是我用来在后台创建 NSManagedObjectContext 的代码:

- (NSManagedObjectContext*) currentThreadContext {

    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [moc setPersistentStoreCoordinator:self.persistentStoreCoordinator];
    [moc setMergePolicy:NSMergeByPropertyStoreTrumpMergePolicy];
    return moc;
}

我确实添加了一个断点来捕获任何异常,这是我得到的:

objc_exception_throw:
[NSPersistentStoreCoordinator executeRequest:withContext:error:]:
[NSManagedObjectContext save:]:
[_PFUbiquityRecordImportOperation main]:
[__NSOperationInternal start]:
[_PFUbiquityRecordsImporter scheduleTransactionLogOperations:synchronous:error:]:
[_PFUbiquityRecordsImporter scanOperationFinished:withDiscoveredLogLocation:error:]:
[PFUbiquityImportScanOperation main]:
[__NSOperationInternal start]:
[_PFUbiquityRecordsImporter scheduleUbiquityRootScan:withLocalPeerLogs:error:]:
[_PFUbiquityRecordsImporter rollResponseOperation:successfullyAdoptedBaseline:]:
[PFUbiquityBaselineRollResponseOperation main]:
[__NSOperationInternal start]:

任何帮助将不胜感激!

4

0 回答 0