Я пытаюсь синхронизировать данные ядра между IOS и OSX. В обоих приложениях я иметь такую же конфигурацию:iCloud: синхронизировать основные данные между IOS и OSX
И те же права:
Я также использую тот же код для координатора магазина в пределах того же имени для SQLite файла и url:
NSManagedObjectModel* managedModel = [NSManagedObjectModel mergedModelFromBundles:nil];
NSPersistentStoreCoordinator* storeCooordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedModel];
//-> start iCloud
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL* applicationFilesDirectory = [JHDCoreDataDAO applicationFilesDirectory];
NSURL* storeURL = [applicationFilesDirectory URLByAppendingPathComponent:DATABASE_NAME];
if(!storeURL) { NSLog(@"Error reading applicationFilesDirectory for given sqlite resouce"); }
NSString* containerIdentifier = [NSString stringWithFormat:@"%@.%@",TEAM_IDENTIFIER,APP_IDENTIFIER];
NSURL* iCloud = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:containerIdentifier];
NSString *iCloudEnabledAppID = @"TEAMID~com~sample~sample";
NSError* persistentStoreError;
if (iCloud) {
NSLog(@"iCloud is working");
NSLog(@"iCloudEnabledAppID = %@",iCloudEnabledAppID);
NSLog(@"iCloud URL: %@",iCloud);
NSString* cloudPath = [[iCloud path] stringByAppendingPathComponent:@"data"];
NSURL* transactionsLogUrl = [NSURL fileURLWithPath:cloudPath];
NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:
iCloudEnabledAppID, NSPersistentStoreUbiquitousContentNameKey,
transactionsLogUrl, NSPersistentStoreUbiquitousContentURLKey,
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
[storeCooordinator lock];
if(![storeCooordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&persistentStoreError])
{
NSLog(@"Fehler: %@, %@", persistentStoreError.localizedDescription, persistentStoreError.userInfo);
abort();
}
[storeCooordinator unlock];
} else {
//Handle local psc
}
});
Каждое приложение, версия IOS и версия OSX, все еще работают отлично в iCloud. Каждое приложение обрабатывает собственную базу данных из-за отсутствия синхронизации между этими двумя приложениями. Есть что-то, что я забыл?
Почему вы используете AppID для NSPersistentStoreUbiquitousContentNameKey? Предположительно приложение App приложения iOS и App App приложения OS X не совпадают или это действительно жестко закодировано в реальных приложениях? В любом случае, NSPersistentStoreUbiquitousContentNameKey и iCloud containerID должны быть одинаковыми для всех приложений, которые хотят синхронизировать одно и то же хранилище Core Data. Ваш контейнер ubiquity в Xcode является 'sample.sample.sample', а в вашем коде его' com.sample.sample ' –
У меня есть аналогичная проблема. Когда я пытаюсь синхронизировать с iCloud в моем приложении os x, я получаю эту ошибку: __60- [PFUbiquitySetupAssistant canReadFromUbiquityRootLocation:] _ block_invoke690 (1489): CoreData: Ubiquity: попытка скачать Peers ударила серьезную ошибку для сверстников для загрузки Error Domain = BRCloudDocsErrorDomain Code = 5 "(BRCloudDocsErrorDomain 5: Нет документа по URL-адресу)" – user3065901