【发布时间】:2013-09-21 23:04:46
【问题描述】:
我认为答案很简单,也许我错过了一些重要的东西!我可以插入一个新对象,我可以从 managerObjectContext 中删除一个对象,我可以通过它的 ID 访问该对象,但我不明白如何更改它!
我的代码很简单:
- (NSManagedObjectContext *)managedObjectContext {
return [(CalcAppDelegate*)[[UIApplication sharedApplication]delegate] managedObjectContext];}
- (void)viewDidLoad {
[super viewDidLoad];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Materials"];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"created" ascending:YES]];
list = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
self.navigationItem.rightBarButtonItem = self.editButtonItem;
[tbl reloadData];}
我将数据传递给另一个 ViewController
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"MatListToDetailSegue"]) {
MaterialsDetailViewController *detailMaterial = segue.destinationViewController;
detailMaterial.material = [list objectAtIndex:tbl.indexPathForSelectedRow.row];
detailMaterial.managedObjectId = [[list objectAtIndex:tbl.indexPathForSelectedRow.row] objectID];
}
我想将此 managedObject 保存在 managedObjectContext 中并提交 managedObjectContext ,但我在 SQLite 文件中没有任何更改!
- (IBAction)saveBtn:(id)sender {
material.matName = editMaterialName.text;
material.matWidth = [NSNumber numberWithInt:300];
material.matPrice = [NSNumber numberWithInt:300];
[self.managedObjectContext save:nil];
[self.navigationController popViewControllerAnimated:YES];}
由于未捕获的异常“NSInvalidArgumentException”而终止应用,原因:“+entityForName: nil 不是搜索实体名称“Materials”的合法 NSManagedObjectContext 参数
哇!谢谢你的答案不同马赫!我解决了这个问题。
我需要:从方法 -(IBAction)saveBtn 中删除它
material = (Materials *)[NSEntityDescription entityForName:@"Materials" inManagedObjectContext:managedObjectContext];
并更改 [self.managedObjectContext save:nil];
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
}
感谢您的提前回复!!!
【问题讨论】:
-
首先,您没有检查
-[NSManagedObjectContext save:]的返回值,即BOOL。如果它返回NO,则没有保存任何内容。此外,如果它返回NO,您也不会检索错误。修复它,稍后会出现错误消息。 -
谢谢你,我修好了,现在当我调用方法时出现错误 -(IBAction)saveBtn:(id)sender
-
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+entityForName:nil 不是搜索实体名称“材料”的合法 NSManagedObjectContext 参数
-
创建一个“查找”方法,该方法将从数据库中获取/创建一个新的材质对象,修改该对象并保存到它自己的上下文中。
-
您确定您有一个名为 Materials 的实体吗?因为这就是异常告诉你的错误。
标签: ios objective-c xcode core-data nsmanagedobjectcontext