CoreData - 在另一台计算机上访问数据库时出错

时间:2011-03-02 19:32:59

标签: macos core-data cluster-computing

我的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一无所知。是因为它在不同的机器上吗?我看过this online,但我认为这是我的问题。如果是,我不知道如何修复它,因为我在.xml目录中找不到与~/Library/Application\ Support/MyApp相关的任何OsiriX文件创建数据库的程序。

我是不是通过网络加载CoreData做错了? 如果没有,我该怎么办?

谢谢,

1 个答案:

答案 0 :(得分:1)

错误表明持久性存储协调器认为该文件不是NSSQLiteStoreType的正确格式。这表明找到了该文件。如果它找不到该文件或访问该目录,您将收到另一个错误。

我不确定您的具体问题是什么,但我可以告诉您一般情况下,Core Data并非作为并发数据库。它根本不是真正的数据库。它实际上是一个运行时对象图管理系统,旨在管理应用程序的模型层,并在侧面添加持久性作为选项。没有用于控制同时访问同一商店的应用程序的多个实例的核心数据选项。您可以通过将商店设置为只读来实现,但我不确定。

听起来您需要在服务器上运行真正的数据库。