Я пытаюсь сохранить некоторые пользовательские метаданные в хранилище SQLite с поддержкой iCloud. В документации, по-видимому, говорится, что в дополнение к метаданным, которые он создает, я должен иметь возможность устанавливать свои собственные метаданные, похожие на NSUserPreferences, но прикрепленные к моему хранилищу основных данных. Похоже, что это должно быть просто:Основные метаданные данных ядра не сохраняются для хранилища iCloud
NSManagedObjectContext* moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[moc setPersistentStoreCoordinator:psc];
NSMutableDictionary* metadata = [[psc metadataForPersistentStore:store] mutableCopy];
metadata[@"testKey"] = @"testValue";
[psc setMetadata:metadata forPersistentStore:store];
[moc save:&error];
Так после того, как это работает мой пользовательский ключ метаданных/значение отображается в поле метаданных магазина. Однако, когда я перезапускаю приложение, метаданные, которые я добавил, больше не существуют (но есть метаданные iCloud). Обратите внимание, что это правильно работает при использовании обычного хранилища без iCloud, поэтому он определен как iCloud.
Дополнительная информация:
Так позволяет сказать, что я получаю метаданные, добавить свои собственные поля, а затем сохранить его, используя статические методы:
[NSPersistentStoreCoordinator setMetadata:metadata forPersistentStoreOfType:NSSQLiteStoreType URL:self.coreDataController.iCloudStore.URL error:&error];
NSDictionary* reviewMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:self.coreDataController.iCloudStore.URL error:&error];
Переменная reviewMetadata
содержит метаданные с моим добавленным поля. Однако, как только я перезапущу приложение (и, следовательно, перезагрузите хранилище), он вернется к тому, как это было. Я даже попытался установить точку останова и убить приложение сразу после выполнения вышеуказанных утверждений, и когда я перезапущу приложение, мои пользовательские метаданные все еще исчезли.
Любые идеи? Я неправильно использую метаданные? Это не работает с магазинами с поддержкой iCloud?
Вы сохраняете, но что-то изменилось в 'moc'? Там может быть оптимизация, где, если 'hasChanges' является ложным, он ничего не делает. –
Вы подтвердили, что как при записи, так и при чтении постоянного координатора хранилища относится к правильному контексту управляемого объекта? – Mundi
Я добавил еще несколько кода, чтобы показать, что я использую правильный moc. Я также пробовал его на основной поток moc, и он все еще не работал. Я также попробовал это с помощью static setMetadata: forPersistentStoreOfType: URL: error: метод на NSPersistentStore. Все еще не повезло :( – kurtzmarc