CoreData - Проблема с доступом к базе данных на другом компьютере

У меня проблема с моим CoreData, но я уверен, что концептуально делаю что-то не так.

Я пытаюсь получить доступ к sql-файлу CoreData на одном компьютере в моей сети с другого компьютера. Я пытаюсь сделать это из кластерного приложения. Каждая машина имеет одну и ту же копию программного обеспечения и должна указывать на базу данных на этой машине.

Моя модель и контекст загружаются нормально для машины, на которой находится база данных. Другая машина выдает ошибку 13400 NSPersistentStoreInvalidTypeError

Вот кусок кода:

NSError *error = nil;
NSURL *mdlurl = [NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"OsiriXDB_DataModel" ofType:@"mom"]];
_model = [[NSManagedObjectModel alloc] initWithContentsOfURL: url];

NSURL *dburl = [NSURL URLWithString:[NSString stringWithUTF8String:_DBPath.c_str()]];
// The dburl has a format like: file://192.168.0.2/Users/slate/Documents/OsiriX%20Data/Database.sql which addresses the machine the data sits on.
_storeCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: _model];
_context = [[NSManagedObjectContext alloc] init];
[_context setPersistentStoreCoordinator: _storeCoordinator];

if (![_storeCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:dburl options:nil error:&error]) {
    NSLog(@"Error loading store: %@", error);  // Error Shows up Here
    NSLog(@"MOM: %@",_model); // Model looks OK.  Lots of print outs, with the correct names and stuff.  (so technical).
}

Признаюсь, я ничего не знаю о CoreData. Это потому что он на другой машине? Я прочитал это онлайн, но я не думаю, что это моя проблема. Если это так, я понятия не имею, как это исправить, потому что я не могу найти файлы .xml в моем каталоге ~/Library/Application\ Support/, относящиеся ни к MyApp, ни к OsiriX, которые являются программой, создавшей базу данных.

Я неправильно загружаю CoreData по сети?
Если нет, что мне делать?

Спасибо,


person Stephen Furlani    schedule 02.03.2011    source источник


Ответы (1)


Ошибка указывает на то, что координатор постоянного хранилища считает, что формат файла не соответствует NSSQLiteStoreType. Это говорит о том, что файл был найден. Если он не сможет найти файл или получить доступ к каталогу, вы получите еще одну ошибку.

Я не уверен, в чем конкретно ваша проблема, но в целом могу сказать, что Core Data не предназначен для использования в качестве параллельной базы данных. Это вообще даже не база данных. На самом деле это система управления графом объектов во время выполнения, предназначенная для управления уровнем модели приложения с постоянством, добавленным сбоку в качестве опции. В Core Data нет опций для управления несколькими экземплярами приложения, одновременно получающими доступ к одному и тому же магазину. Возможно, вы сможете сделать это, установив хранилище только для чтения, но я точно не знаю.

Похоже, вам нужна настоящая база данных, работающая на вашем сервере.

person TechZen    schedule 03.03.2011
comment
Ой. Это... отстой. База данных представляет собой файл database.sql. Я должен иметь доступ к ней, как и к любой другой базе данных sql, да? - person Stephen Furlani; 03.03.2011
comment
Это не похоже на файл, сгенерированный Core Data. Хранилища Core Data SQL имеют расширение .sqlite и по умолчанию имя приложения, создавшего хранилище. Core Data не откроет какой-либо общий файл SQL, а только файл SQLite, созданный с помощью (недокументированной) схемы Core Data. На практике это означает, что вы можете использовать только хранилища, созданные Core Data. Обычно решение состоит в том, чтобы написать небольшое приложение для преобразования файла SQL в хранилище основных данных, просто прочитав данные SQL и создав управляемые объекты по мере необходимости. - person TechZen; 03.03.2011
comment
Спасибо. Мы собираемся отказаться от базы данных из старой программы и перейти к чему-то совершенно новому. - person Stephen Furlani; 07.03.2011