0

私のプログラムは、事前に入力された SQL データベースを取得し、レコードをアプリのデータベースに保存する必要があります。残念ながら、何らかの理由で、アプリケーション デリゲートの次のメソッドでアプリケーションが終了します。

#pragma mark -
#pragma mark Core Data stack
- (NSManagedObjectModel *)managedObjectModel {
    if (managedObjectModel_ != nil) {
        return managedObjectModel_;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"iProspectLite" ofType:@"sqlite"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
return managedObjectModel_;
}

アプリケーションが有効な managedObjectModel_ を見つけられないか、存在しないか、作成していないように見えます。どうすればこれを解決できますか?

コンソールに表示されるエラー メッセージの 1 つは次のとおりです。

この一部を NSManagedObject に絞り込みました。作成または検出されたものはないようです。

役立つその他の情報: 他の多くのコアデータ チュートリアルで説明されているように、エンティティを追加し、属性を定義しました。エンティティを定義するクラスは次のとおりです。

#import "Mine.h"


@implementation Mine 

@dynamic primarykey;
@dynamic name;
@dynamic firstCommodity;
@dynamic longitude;
@dynamic county;
@dynamic secondCommodity;
@dynamic latitude;
@dynamic thirdCommodity;

@end
4

3 に答える 3

2

事前入力された SQLite データベースはどこで入手できますか? Core Data で作成されていない場合、機能しません。Core Data は、Core Data で作成された SQLite ファイルのみを読み取ることができます。

于 2010-09-03T05:50:21.610 に答える
1

Apple のCore Data Development Guideから:

データ モデルのコンパイル

データ モデルはデプロイ リソースです。モデル内のエンティティとプロパティの詳細に加えて、Xcode で作成したモデルには、ダイアグラムに関する情報 (レイアウト、要素の色など​​) が含まれています。この後者の情報は、実行時には必要ありません。モデル ファイルは、余分な情報を削除し、リソースの実行時の読み込みを可能な限り効率的にするためにコンパイルされます。「xcdatamodel ソース」ファイルは、モデル コンパイラを使用して mom 展開ファイルにコンパイルされますmomc

つまり、管理対象オブジェクト モデルは、ビルド プロセス中に Xcode によって Xcode データ モデルの「ソース」から「コンパイル」され、その.momファイルはアプリケーション バンドル内に配置されます。そのため、データ モデル ファイルを手動で作成する必要がある場合があります。

これを回避するために、Core Data に精通したコマンド ライン ツールを使用して、iPhone プロジェクトで使用する SQLite データベース ファイルを事前設定します。

編集:

Zarra 氏が正しければ (そして彼は通常正しければ)、私が説明した方法でコマンド ライン ツールを作成し、既存のデータベースを開き、新しい SQLite データベース ファイルに Core Data を事前入力する必要があります。少し痛いですが、うまくいきます。

于 2010-09-02T22:55:06.173 に答える
1

問題は、アプリ バンドル内のパスから SQL 永続ストアへのモデル ファイルを読み込もうとすることです。ストアとモデル ファイルは、2 つの異なる機能を持つ 2 つの異なるタイプのファイルです。2 つのファイル タイプはまったく異なる情報を保持するため、SQL ファイルから NSManagedObjectModel インスタンスを初期化することはできません。

pathForResource:正しいファイルを探すように変更する必要があります。ファイルの種類はmomで、デフォルト名はアプリ名なので、次のようなものを使用する必要があります。

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"AppName" ofType:@"mom"];

(モデルに別の名前を付けた場合は、その名前を使用してください。)

これはすべて、既存の SQL ファイルのインポートとは関係ありません。ただし、他の人が提案したように、SQL をインポートする前にこれを修正する必要があります。

于 2010-09-04T20:28:15.657 に答える