CoreData - Проблем с достъпа до база данни на друга машина

Имам проблем с моя CoreData, но съм сигурен, че правя нещо грешно концептуално.

Опитвам се да получа достъп до CoreData sql файл на една машина в моята мрежа от друга машина. Опитвам се да направя това от подобно на клъстер приложение. Всяка машина има едно и също копие на софтуера и трябва да сочи към базата данни на тази машина.

Моят модел и контекст се зареждат добре за машината, на която е базата данни. Другата машина ми дава грешка 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. Това предполага, че файлът е намерен. Ако не може да намери файла или да получи достъп до директорията, ще получите друга грешка.

Не съм сигурен какъв точно е проблемът ви, но мога да ви кажа като цяло, че основните данни не са предназначени като едновременна база данни. Това изобщо не е база данни. Това всъщност е система за управление на графики на обекти по време на изпълнение, предназначена да управлява моделния слой на приложението с постоянство, поставено отстрани като опция. Няма опции за основни данни за контролиране на множество екземпляри на приложение, които едновременно имат достъп до един и същ магазин. Може да успеете да го направите, като настроите магазина като само за четене, но не знам със сигурност.

Изглежда, че имате нужда от истинска база данни, работеща на вашия сървър.

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