Ios 尝试保存核心数据记录后出错
我有一个视图控制器来添加核心数据记录。核心数据实体名称为FavoriteThings,属性为thingname。我有一个名为SaveButtonAction的保存按钮操作。当我点击按钮内部时,插入名为ToDoTextField的文本字段中的文本应该被存储,但应用程序崩溃,显示以下日志错误:Ios 尝试保存核心数据记录后出错,ios,core-data,managedobjectcontext,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 'NSInval
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]);
}
感谢您的时间。您没有将
NSManagedObjectContext
传递给视图控制器(您的上下文为nil
)。尝试保留对它的强引用,并使用有效上下文初始化视图控制器。
如果使用CoreData项目的样板代码,则可以通过应用程序委托访问主上下文:
appDelegate.managedObjectContext
它告诉您managedObjectContext参数的值为nil。
也许您指的是
[self-managedObjectContext]
,我猜这是一个访问器,它可能“懒惰”地实例化托管对象上下文,目前还没有被调用。您正在抛出异常的代码中直接访问实例变量。请检查enity名称,并执行以下操作
在你的应用程序中
+(YourAppDeleagte*)sharedManagedContext;
在YourAppDelegte.m中
+(YourAppDeleagte*)sharedManagedContext{
return (YourAppDeleagte *)[[UIApplication sharedApplication]delegate];
}
在viewController.m中
#导入“YourAppDelegate.h”
谢谢@DineshKumar,但是字符+(…*)是什么意思?+(void)方法A它是类方法-(void)方法B它是实例方法你的意思是将这一行添加到我的AppDelegate.h:-(void)sharedManagedContext;
@property(nonatomic,retain)NSmanagedObjectContext *managedObjectContext;
-(void)viewDidLoad{
[super viewDidLoad];
self.managedObjectContext=[YourAppDelagete shareManagedContext].managedObjectContext;
}