1. ホーム
  2. objective-c

'+entityForName: nil は有効な NSManagedObjectContext パラメータではありません - Core Data

2023-11-24 23:03:16

質問

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

私の問題は、ビューコントローラでデータモデルに書き込もうとしたときに起こります。私はこのコードをヘッダーファイルに追加しました。

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''

どなたかご存知の方いらっしゃいますか?何か手助けがあれば幸いです。

どのように解決するのですか?

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

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

もちろん、あなたがコンテキストを "managedObjectContext" というプロパティに保持していると仮定しての話ですが。