0

コア データ レコードを追加するビュー コントローラーがあります。コア データ エンティティ名は FavoriteThings で、属性は thingname です。SaveButtonAction という名前の保存ボタン アクションがあります。ボタン内をタップすると、ToDoTextField というテキスト フィールドに挿入されたテキストが保存されるはずですが、次のログ エラーが表示されてアプリがクラッシュしました。

2013-12-09 12:30:07.488 Favorite Things[1701:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'FavoriteThing'' 

これはメソッドのコードです

- (IBAction)SaveButtonAction:(id)sender {
    FavoriteThing *newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"FavoriteThing" inManagedObjectContext:managedObjectContext ];
    newEntry.thingName = self.ToDoTextField.text;
    NSError *error;
    if (![self.managedObjectContext save:&error])
    {
        NSLog(@"Whoops, couldn't save:%@",[error localizedDescription]);
    }

お時間をいただきありがとうございます..

4

3 に答える 3

1

あなたはNSManagedObjectContextView Controllerにあなたを渡しません(あなたのコンテキストはですnil)。
それへの強力な参照を維持し、有効なコンテキストでView Controllerを初期化してください。

CoreData プロジェクトのボイラープレート コードを使用すると、アプリ デリゲートを介してメイン コンテキストにアクセスできます。appDelegate.managedObjectContext

于 2013-12-09T19:47:58.670 に答える
1

managedObjectContext パラメーターの値が nil であることを示しています。おそらくあなたが意味し[self managedObjectContext]ていたのは、管理対象オブジェクトのコンテキストをインスタンス化するのが「怠惰」で、この時点ではまだ呼び出されていない可能性があるアクセサーであると推測します。例外をスローしているコードでインスタンス変数に直接アクセスしています。

于 2013-12-09T19:48:10.587 に答える
0

エンティティ名を確認し、次の操作も行ってください

YourAppDeleagte.h で

+(YourAppDeleagte*)sharedManagedContext;

YourAppDeleagte.m で

  +(YourAppDeleagte*)sharedManagedContext{

     return (YourAppDeleagte *)[[UIApplication sharedApplication]delegate];
}

viewController.m で

#import "YourAppDelegate.h"

@property(nonatomic,retain)NSmanagedObjectContext *managedObjectContext;

-(void)viewDidLoad{
   [super viewDidLoad];
   self.managedObjectContext=[YourAppDelagete shareManagedContext].managedObjectContext;         
 }
于 2013-12-09T21:15:50.063 に答える