73

関連するすべてのコードを App Delegate に追加しました。データ モデルに追加し、applicationDidFinishLaunchingWithOptions でデータ モデルからフェッチすることができます。

私の問題は、View Controller のデータ モデルに書き込もうとしているときに発生します。このコードをヘッダー ファイルに追加しました。

NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;

@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;

そして、このコードを私の実装ファイルに:

NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *model = [NSEntityDescription
                          insertNewObjectForEntityForName:@"Events" 
                          inManagedObjectContext:context];
[model setValue:@"Sample Event" forKey:@"eventName"];

NSError *error;
if (![context save:&error]) {
    NSLog(@"Couldn't save: %@", [error localizedDescription]);
}

ただし、次のエラーが表示されます。

'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'Events''

誰が何が起こっているのか知っていますか?どんな助けでも大歓迎です。

4

8 に答える 8

46

コンテキストをView Controllerに渡すのを忘れていました。新人エラー。

于 2012-07-21T23:26:23.127 に答える
45

データベースからデータのフェッチを開始する前に、次のコードを含めることでコンテキストを渡すことができます。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
context = [appDelegate managedObjectContext];
于 2012-11-24T05:53:50.623 に答える
37

セグエを使用している場合、コンテキストを行に渡さないと同じ問題が発生します。セグエを開始するクラスの prepareForSegue メソッドで次のコードを使用します。

[[segue destinationViewController] setManagedObjectContext:self.managedObjectContext];

もちろん、「managedObjectContext」と呼ばれるプロパティにコンテキストを保持していることを前提としています。

于 2012-12-26T16:09:32.530 に答える
20

これをviewControllerに追加する必要があります:

 id delegate = [[UIApplication sharedApplication] delegate];
    self.managedObjectContext = [delegate managedObjectContext];
于 2013-01-20T07:53:40.290 に答える
2

私はこの問題を抱えており、同僚が私を助けてくれました。次のエラー メッセージが表示された場合: 「entityForName: nil は、エンティティ名を検索する有効な NSManagedObjectContext パラメータではありません」。そして、coredata モデルに変更を加えました。問題はコードではないかもしれないと思います。

解決策は簡単です。次のオプションのいずれかを試してください。

  • テストしているデバイスからアプリを削除するだけで、モデルの古いバージョンが含まれているはずです。
  • Xcode、>Editor>Add Model Version を使用して、別のデータベース バージョンを作成します。

それが役に立てば幸い。

于 2014-05-27T17:31:14.003 に答える
0

宛先のView ControllerがNavigationControllerに埋め込まれている場合、次のようにコンテキストを適切に設定する必要があります-

  self.mydetailViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0];
 [self.mydetailViewController setManagedObjectContext:self.managedObjectContext];
于 2014-03-14T17:08:04.063 に答える