iCloud Core Data "нет документа по URL"

У меня есть приложение с основными данными и icloud, чтобы позволить пользователю использовать одну и ту же базу данных на нескольких устройствах. Синхронизация работает большую часть времени, но иногда это не так, то есть некоторые транзакции просто пропущены.

Когда я проверяю консоль, я получаю сообщение об ошибке:

__45- [PFUbiquityFilePresenter processPendingURLs] _block_invoke (439): CoreData: Ubiquity: библиотекарь вернула серьезную ошибку для запуска загрузки. Error Domain = BRCloudDocsErrorDomain Code = 5 «Операция не может быть выполнена. (Ошибка BRCloudDocsErrorDomain 5 – Нет документа по URL)»

Довольно смешно это сообщение появляется, даже когда синхронизация работает.

Код подходит для последней версии Apple «Руководство по программированию iCloud для основных данных». МагазинURL кодируется следующим образом:

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]; 

Насколько я понимаю документы, делать не так уж много (?). Но я думаю, что я что-то упускаю, кто-нибудь имеет представление, что проверить, изменить, попробовать? Любой, у кого была такая же проблема? Любые идеи приветствуются!

2 Solutions collect form web for “iCloud Core Data "нет документа по URL"”

У меня такая же проблема и она решена, удалив 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

Я надеюсь, что это помогает.

Я обнаружил, что когда у меня был URL-адрес магазина . s на пути

(например, ---/com.companyName.project/--- )

 let applicationSupportDirectory = applicationSupportDirectoryURL.URLByAppendingPathComponent("com.companyName.project") let iCloudStoreFileName = "iCloud.sqlite" lazy var iCloudStoreURL: NSURL = { return self.applicationSupportDirectory.URLByAppendingPathComponent(self.iCloudStoreFileName) }() 

Когда я включил ведение журнала, перейдя в Edit Scheme... в Xcode для моего проекта и добавив:

 -com.apple.CoreData.SyntaxColoredLogging 1 

файл журнала в окне отладки показал, что путь, который он искал, был

 ---/com~companyName~project/--- 

Основные данные изменили . s до ~ s. Я удалил весь com.companyName.project из URL-адреса, и синхронизация, похоже, работает лучше. Но с базовыми данными и iCloud вы никогда не знаете, что за кулисами происходит много магии.

  • iCloud с синхронизацией основных данных и файлов
  • iCloud - синхронизация изображений в фотоальбоме
  • Почему iCloud иногда перестает работать?
  • Интеграция iCloud для загрузки и скачивания файлов
  • Core Data, iCloud & App приостановлено с заблокированными файлами системы
  • iOS: использование хранилища документов iCloud для небольшой базы данных на базе XML
  • Удаление основных данных Внешний объект хранения не освобождает место в iCloud
  • Создать идентификатор iCloud в панели разработчиков iOS
  • Используя UIDocumentPickerViewController, можно ли показывать службу по умолчанию (Dropbox, Google Диск и т. Д.) При первом открытии, как в Slack?
  • iCloud и основные данные - как отлаживать?
  • Основные данные с iCloud никогда не переключаются с `Использование локального хранилища: 1`
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.