我有一个视图控制器来添加核心数据记录。核心数据实体名称为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]);
}
感谢您的时间..
答案 0 :(得分:1)
您没有将NSManagedObjectContext
传递给视图控制器(您的上下文为nil
)
尝试保留对它的强引用,并使用有效的上下文初始化视图控制器。
如果您使用CoreData项目的样板代码,则可以通过您的应用代表访问主要上下文:appDelegate.managedObjectContext
答案 1 :(得分:1)
它告诉您,您的managedObjectContext参数的值为nil。
也许你的意思是[self managedObjectContext]
,我猜它是一个可能“懒惰”实例化托管对象上下文的访问器,此时还没有被调用。您正在直接在抛出异常的代码中访问实例变量。
答案 2 :(得分:0)
请检查enity名称并执行以下操作
+(YourAppDeleagte*)sharedManagedContext;
+(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;
}