2011-03-02 62 views
0

我的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。是因为它在不同的机器上吗?我读this online,但我不认为这是我的问题。如果是这样,我不知道如何解决这个问题,因为我在我的~/Library/Application\ Support/目录中找不到任何.xml文件,该目录与MyAppOsiriX(即创建该数据库的程序)有关。

我在做错误的事情来加载网络上的CoreData?
如果不是,我该怎么做?

感谢,

回答

1

的错误指示持久存储协调员认为该文件是不是一个NSSQLiteStoreType正确的格式。这表明该文件被找到。如果无法找到文件或访问目录,则会出现另一个错误。

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

这听起来像你需要一个真正的数据库在你的服务器上运行。

+0

哦。那......太糟糕了。数据库是一个“database.sql”文件。我应该能够访问像任何其他SQL数据库,是吗? –

+0

这听起来不像一个核心数据生成的文件。核心数据SQL商店的扩展名为'.sqlite',默认情况下为创建商店的应用程序的名称。核心数据不会打开任何通用SQL文件,而只会打开使用(未记录的)核心数据模式创建的SQLite文件。实际上,这意味着您只能首先使用Core Data生成的商店。通常解决方案是编写一个小型转换应用程序,通过简单读取SQL数据并根据需要创建managedObjects,将SQL文件转换为Core Data存储。 – TechZen

+0

谢谢。我们将从旧程序中删除“数据库”,并使用全新的东西。 –

相关问题