尝试保存核心数据记录后出错

时间:2013-12-09 19:42:19

标签: ios core-data managedobjectcontext

我有一个视图控制器来添加核心数据记录。核心数据实体名称为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]);
    }

感谢您的时间..

3 个答案:

答案 0 :(得分:1)

您没有将NSManagedObjectContext传递给视图控制器(您的上下文为nil) 尝试保留对它的强引用,并使用有效的上下文初始化视图控制器。

如果您使用CoreData项目的样板代码,则可以通过您的应用代表访问主要上下文:appDelegate.managedObjectContext

答案 1 :(得分:1)

它告诉您,您的managedObjectContext参数的值为nil。 也许你的意思是[self managedObjectContext],我猜它是一个可能“懒惰”实例化托管对象上下文的访问器,此时还没有被调用。您正在直接在抛出异常的代码中访问实例变量。

答案 2 :(得分:0)

请检查enity名称并执行以下操作

在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;         
 }