2013-09-17 1 views
1

Я думаю, что ответ очень прост, возможно, мне не хватает чего-то важного! Я могу вставить новый объект, я могу удалить объект из 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]) { 
} 

Спасибо за наступление за ваш ответ !!!

+0

Сначала вы не проверяете возвращаемое значение '- [NSManagedObjectContext save:]' который является 'BOOL'. Если он возвращает «НЕТ», ничего не было сохранено. Также вы не получаете ошибку в случае, если она возвращает «НЕТ». Исправьте его и придет позже с сообщением об ошибке. – robertvojta

+0

спасибо, я исправил его, и теперь у меня ошибка, когда я вызываю метод - (IBAction) saveBtn: (id) sender –

+0

Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '+ entityForName: nil не является законным NSManagedObjectContext поиск параметров для имени сущности «Материалы» –

ответ

0

Подождите, в ваш объект Material вы назначаете экземпляр NSEntityDescription. Я почти уверен, что вы этого не хотите.

Вот почему вы рушитесь. Когда основные данные сохраняются, он пытается сохранить ваш объект Material (ожидая, что он будет подклассом NSManagedObject), но вместо этого у вас есть NSEntityDescription в этом пространстве памяти.

Кроме того, вы где-то используете Materials и где-то Material. Не может ли это быть проблемой?

 Смежные вопросы

  • Нет связанных вопросов^_^