我认为答案非常简单,也许我错过了一些重要的事情!我可以插入一个新对象,我可以从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];
}
我希望在managedObjectContext中保存此managedObject并提交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不是合法的NSManagedObjectContext参数,用于搜索实体名称'Materials''
哇!谢谢各位马赫的答案!我解决了这个问题。
我需要:从方法中删除它 - (IBAction)saveBtn
material = (Materials *)[NSEntityDescription entityForName:@"Materials" inManagedObjectContext:managedObjectContext];
并更改[self.managedObjectContext save:nil];
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
}
感谢您提前回复!!!
答案 0 :(得分:0)
等待,您正在为Material
对象分配NSEntityDescription
的实例。我几乎可以肯定这不是你想要的。
这就是你崩溃的原因。当Core Data正在保存时,它正在尝试保存您的Material
对象(期望它是NSManagedObject
的子类),而是在该内存空间中有NSEntityDescription
。
此外,您使用的是Materials
和某处Material
。这不是一个问题吗?