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

您不会将您的内容传递NSManagedObjectContext给视图控制器(您的上下文是nil)。
尝试保持对它的强引用并使用有效的上下文初始化您的视图控制器。

如果您使用 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 回答