2

私のプロジェクトでは、CoreData を使用してデータベースを作成および使用していますが、完全に正常に動作しています。これで、プロジェクトに統合して使用したい SQLite データベース ファイル (.db) ができました (coredata を使用)。

プロジェクトに .db ファイルを追加し、次のコードを使用して Documents ディレクトリに書き込み可能なコピーを作成しました -:

- (void)createEditableCopyOfDatabaseIfNeeded {
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"wordlist1000.db"];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success)
    return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"wordlist1000.db"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
    NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}

}

データベースから結果をフェッチしようとすると、このエラーが発生します

SQLite エラー コード:1、「そのようなテーブルはありません: Z_METADATA」、NSSQLiteErrorDomain=1}

ここからの進め方を教えてください。いくつかのコード サンプルは非常に役立ちます。

要約すると、外部データベースをインポートし、CoreData を使用して xCode プロジェクトで使用したいだけです。

ありがとう!

4

2 に答える 2

2

そんなことはできません。Core Data は、SQLite の単純なラッパーではありません。これは非常に異なる API を提供し、文書化されていない独自の SQLite スキーマを使用します。SQLite は実装の詳細であり、Core Data を介して直接使用できるものではありません。

SQLite データを Core Data に取り込みたい場合は、次のことを行う必要があります。

  1. Core Data モデル ファイルをプロジェクトに追加し、スキーマに一致する適切なエンティティを含むように構成します。
  2. 独自のネイティブ API または FMDB や PLDatabase などの Objective-C ラッパーのいずれかを使用して、SQLite からデータを読み取ります。
  3. Core Data の API を使用して、そのデータを新しい Core Data ストア ファイルに書き込みます。

データを SQLite に残したいだけかもしれません。FMDB と PLDatabase は、Core Data アプローチに切り替える代わりに、コードで SQL-isms を引き続き使用できる非常に便利なラッパーを提供します。

于 2013-04-10T17:33:37.317 に答える