2011-03-02 59 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

謝謝。我們將從舊程序中刪除「數據庫」,並使用全新的東西。 –

相關問題