2011-03-02 15 views
0

CoreDataに問題がありますが、概念的に間違っていると思います。CoreData - 別のマシンのデータベースにアクセスする際の問題

ネットワーク上のあるマシンのCoreData sqlファイルに別のマシンからアクセスしようとしています。私はクラスターのようなアプリケーションからこれをやろうとしています。各マシンはソフトウェアの同じコピーを持ち、この1台のマシン上のデータベースを指す必要があります。

データベースが稼動しているマシンでモデルとコンテキストが正常に読み込まれます。他のマシンは、コードのビットをここでエラーに私に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を読むが、私はと思う。それは私の問題だ。もし私がのファイルがMyAppまたはというディレクトリにあり、データベースを作成したプログラムが見つからないため、修正する方法がわかりません。

CoreDataをネットワーク経由で読み込むのは間違っていますか?
もしそうでなければ、私は何をしていますか?

おかげで、

答えて

1

エラーは、永続ストアコーディネータは、ファイルがNSSQLiteStoreTypeのための適切なフォーマットではないと考えていることを示しています。それはファイルが見つかったことを示唆しています。ファイルを見つけられなかったり、ディレクトリにアクセスできない場合は別のエラーが発生します。

あなたの問題は具体的にはわかりませんが、コアデータが並行データベースとして意図されていないことを一般に伝えることができます。実際にはデータベースではありません。実際には、アプリケーションのモデルレイヤーを永続性をオプションとして横に付けて管理するためのランタイムオブジェクトグラフ管理システムです。同じストアに同時にアクセスするアプリの複数のインスタンスを制御するためのCore Dataオプションはありません。ストアを読み取り専用に設定することで可能になるかもしれませんが、わかりません。

実際のデータベースがサーバー上で実行されている必要があるようです。

+0

ああ。それは...吸う。データベースは "database.sql"ファイルです。他のSQLデータベースと同様にアクセスできるはずですか? –

+0

コアデータ生成ファイルのようには聞こえません。コアデータSQLストアには拡張子 '.sqlite'があり、デフォルトではストアを作成したアプリケーションの名前が格納されています。コアデータは汎用SQLファイルを開かず、(文書化されていない)コアデータスキーマで作成されたSQLiteファイルのみを開きます。実際には、これは最初にコアデータによって生成されたストアのみを使用できることを意味します。通常、SQLデータを読み込み、必要に応じてmanagedObjectを作成するだけで、SQLファイルをコアデータストアに変換するための小さな変換アプリケーションを作成するソリューションです。 – TechZen

+0

ありがとうございます。私たちは古いプログラムから "データベース"を取り除き、まったく新しいものに行きます。 –

関連する問題