Ансамбли: MagicalRecord и iCloud

Я пытаюсь интегрировать iCloud в свой старый проект, но в то же время пытаюсь обновить базу данных с помощью MagicalRecord. iCloud работает, когда я не использую пользовательское имя файла .sqlite, но не с пользовательским. Здесь есть код, который лучше объясняет, что я имею в виду.

// Load model. Don't use the standard 'merged model' of Magical Record, because that would include
// the Ensembles model. Don't want to merge models.
NSManagedObjectModel *model = [NSManagedObjectModel MR_newManagedObjectModelNamed:@"Polyglott.momd"];
[NSManagedObjectModel MR_setDefaultManagedObjectModel:model];

// Setup Core Data Stack
[MagicalRecord setShouldAutoCreateManagedObjectModel:NO];

// This is the custom file name
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"PolyglottModel"];
// Here is the default one
// [MagicalRecord setupAutoMigratingCoreDataStack];

// Setup Ensemble

// Here, I'm not sure which one is the right way
NSURL *url = [NSPersistentStore MR_urlForStoreName:@"PolyglottModel.sqlite"];
// NSURL *url = [NSPersistentStore MR_urlForStoreName:[MagicalRecord defaultStoreName]];

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Polyglott" withExtension:@"momd"];
self.cloudFileSystem = [[CDEICloudFileSystem alloc] initWithUbiquityContainerIdentifier:@"iCloud.de.thm.polyglott"];
self.ensemble = [[CDEPersistentStoreEnsemble alloc] initWithEnsembleIdentifier:@"PolyglottMR"
                                                            persistentStoreURL:url
                                                         managedObjectModelURL:modelURL
                                                               cloudFileSystem:self.cloudFileSystem];
self.ensemble.delegate = self;

// Listen for local saves, and trigger merges
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localSaveOccurred:) name:CDEMonitoredManagedObjectContextDidSaveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cloudDataDidDownload:) name:CDEICloudFileSystemDidDownloadFilesNotification object:nil];

[self syncWithCompletion:nil];

leechPersistentStoreWithCompletion и mergeWithCompletion не дают мне никаких ошибок, но когда я запрашиваю базу данных, данных нет.

Любая идея или пример? Огромное спасибо заранее.


person Fernando Silva    schedule 18.05.2016    source источник


Ответы (1)


Я предполагаю, что вы видели пример кода MagicalRecord в Ensembles.

Я не уверен, что именно не так, но я собираюсь предположить, что вы передаете неправильное имя MR_urlForStoreName:. Вы, вероятно, должны оставить расширение или что-то в этом роде. Это должно быть легко увидеть, установив точку останова и распечатав URL-адрес, чтобы убедиться, что он правильный.

person Drew McCormack    schedule 18.05.2016
comment
Вы правы, я следовал примеру кода. Я пробовал оба имени, с .sqlite и без него. На самом деле, проверяя путь, я видел его без расширения. Во всяком случае, это тоже не работает. Наконец, я решил скопировать магазин из пользовательского файла в магазин по умолчанию только для обновления и использовать его по умолчанию. Это немного сложное, но быстрое решение. Спасибо! - person Fernando Silva; 19.05.2016