Я думаю, что ответ очень прост, возможно, мне не хватает чего-то важного! Я могу вставить новый объект, я могу удалить объект из managerObjectContext, я могу получить доступ к объекту через его ID, но я не могу понять, как я могу его изменить!Как изменить существующий менеджерОбъект в managerObjectContext
мой код очень прост:
- (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: ноль не является юридическим параметром NSManagedObjectContext ищет имя объекта 'Материалы''
вау! спасибо вам за ответы! Я решил проблему.
Аль я необходимо: удалить из этого метода - (IBAction) saveBtn
material = (Materials *)[NSEntityDescription entityForName:@"Materials" inManagedObjectContext:managedObjectContext];
и изменения [self.managedObjectContext сохранить: ноль];
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
}
Спасибо за наступление за ваш ответ !!!
Сначала вы не проверяете возвращаемое значение '- [NSManagedObjectContext save:]' который является 'BOOL'. Если он возвращает «НЕТ», ничего не было сохранено. Также вы не получаете ошибку в случае, если она возвращает «НЕТ». Исправьте его и придет позже с сообщением об ошибке. – robertvojta
спасибо, я исправил его, и теперь у меня ошибка, когда я вызываю метод - (IBAction) saveBtn: (id) sender –
Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '+ entityForName: nil не является законным NSManagedObjectContext поиск параметров для имени сущности «Материалы» –