4

モデルにいくつかの変更を加えました (ただし、まだ移行はしたくないので、アプリケーションを削除し、クリーンなビルドなどを行うだけです)。

ただし、iPhone またはシミュレーターで実行すると、次のエラーが発生します。

*** キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: 'executeFetchRequest:error: フェッチ要求にはエンティティが必要です。

エンティティを次のように設定します。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];

私の managedObjectContext は nil ではありません。しかし、モデルにエンティティを表示するとリストが空になるため、オブジェクト モデルが正しく読み込まれていないか、同様のものが読み込まれていないと思われます。

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
NSLog(@"%d", [[managedObjectModel entities] count]);

モデルがロードされていることを確認するにはどうすればよいですか?

4

7 に答える 7

8

「エンティティを表示」している場所はどこですか?それらがデータ モデル エディターに表示されない場合は、そこにありません。

-[NSManagedObjectModel entities]モデルが持つエンティティの配列を取得するために使用できます。

次に、 を使用-[NSPersistentStore managedObjectModel]して、ロードされているモデルを確認し、そのエンティティをクエリできます。

ただし、ほとんどの場合、このエラーはスペルミスが原因です。そのため、エンティティ名を返すために定義またはクラス メソッドを使用することをお勧めします。

于 2010-06-13T00:22:55.933 に答える
6

私は同じ問題を経験しました。TechZen のコメントで示唆されているように、私にとっての修正は、Xcode 3.x でファイルを右クリックし、[情報を見る] を選択してから、[ターゲット] タブの下にある適切なボックスにチェックを入れることでした。

更新: Xcode 4 では、[情報を見る] メニュー オプションが削除されました。代わりに、右側のサイドバーでファイルの「ターゲット メンバーシップ」を定義できます。

于 2010-11-09T20:09:05.540 に答える
1

注意すべきもう 1 つの点は、xcdatamodeld ファイルをクリックしてエンティティを表示すると、左側の [構成] の [デフォルト構成] にエンティティのリストが表示されることです。それらがプロジェクト内のクラスである場合 (そうあるべきだと思います)、必ずクラス名を [クラス] 列の下に配置してください。

于 2012-09-26T00:11:22.170 に答える
0

Xcode 4.4 で同時に開いた複数のプロジェクトでこの問題が発生しました。

複数のプロジェクトがある場合、Xcode 4.4 は間違ったプロジェクトのデータモデルを使用し、エンティティを見つけられない場合があります。解決策は、一度に 1 つのプロジェクトのみを開くことでした。

于 2012-08-02T08:57:49.110 に答える
0

同じ問題がありました。私の場合、古いモデルがまだロードされていたため、プロジェクトをクリーンアップし、シミュレーターからアプリをアンインストールする必要がありました。

デバッグするには:

  • オブジェクト モデル内のすべてのエンティティを出力するには、次のようにします。[dictionary enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ = %@", key, obj); }];
  • また、これを使用してエンティティの数を出力しました: NSLog(@"Number of entities: %d", [[self.managedObjectContext.persistentStoreCoordinator.managedObjectModel entities] count]);
于 2013-02-07T05:33:34.740 に答える