Изменение записей в основных данных без режима редактирования

У меня возникли проблемы с повторным сохранением записей в моих основных данных, и я надеялся, что кто-то может помочь мне понять, что мне здесь не хватает:

Когда я хочу сохранить запись, у меня есть таблица "продукт" с кодом ниже:

- (IBAction)save:(id)sender
{

MyCoreDataClass *productOne = [NSEntityDescription insertNewObjectForEntityForName:@"MyCoreDataClass" inManagedObjectContext:self.managedObjectContext];

productOne.reference = reference.text;
productOne.type = type.text;
productOne.cost = cost.text;


[self.managedObjectContext save:nil];

[self dismissModalViewControllerAnimated:YES];

}

Как вы уже поняли, у меня есть табличное представление «Список продуктов», где все записи отображаются/сохраняются красиво, и в моем методе didSelectRowAtIndexPath «Список продуктов» я сделал это: (я не использую переходы!)

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCoreDataClass *produtoSelected = (Lista *)[[self fetchedResultsController] objectAtIndexPath:indexPath];

if ([produtoSelected.reference isEqualToString:@"shirts"]||[produtoSelected.reference isEqualToString:@"pants"] )
{
  Product *example=(Product *)[self.storyboard instantiateViewControllerWithIdentifier:@"ProductId"];
    produto.modalPresentationStyle = UIModalPresentationFormSheet;
    produto.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:example animated:YES];
    produto.view.superview.frame = CGRectMake(0, 0, 350, 510); //do this after presentModalViewController
    example.view.superview.center = self.view.center;
    example.reference.text = produtoSelected.reference;
    example.type.text = produtoSelected.type;
    example.cost.text = produtoSelected.cost;
    example.managedObjectContext = self.managedObjectContext;

    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];  
}

Отображается предыдущая сохраненная информация, после этого я уже пробовал "self.managedObjectContext refreshObject", и я знаю, что моя последняя строка неверна... Делегатом моего табличного представления "Продукт" является мое табличное представление "Список продуктов"... и я видел примеры, когда пользователь входит в режим EDIT, но я просто не хочу этого... я просто хочу, чтобы пользователь нажимал на строку желаний, модифицировал то, что он хочет, и нажимал кнопку "Сохранить"...

Что мне не хватает, я теряю часы здесь ... может ли кто-нибудь мне помочь?

Заранее спасибо за ваше время.


person Japa    schedule 17.11.2012    source источник


Ответы (1)


Первый пункт. Следующая строка несовместима:

X *object = (Y*) [fetchedResultsController objectAtIndexPath:indexPath]; 

X должен быть классом, который вам нужен, (Y*) вы можете опустить, так как правильный тип объекта должен быть возвращен автоматически.

Второй. После сохранения новых атрибутов сущности есть два способа отобразить изменения.

  1. Вы можете просто позвонить [tableView reloadData]. Если вы сделаете это до того, как появится родительский контроллер представления, это даже не будет выглядеть некрасиво, но это может быть дорогостоящей операцией.

  2. Лучше реализовать методы NSFetchedResultsControllerDelegate, которые оповещают контроллер представления об изменениях в управляемых объектах. Там вы просто обновляете соответствующие строки вашего табличного представления.

person Mundi    schedule 17.11.2012
comment
Привет Мунди, спасибо за ответ. Да, ты прав, мне не нужно использовать (y*). Но мой X должен быть моим представлением таблицы продуктов? Кроме того, у меня есть NSFetchedResultsControllerDelegate в моем представлении таблицы продуктов, и я говорю своему списку продуктов, что она является делегатом моего продукта, после этого у меня есть все методы, которые требуют основные данные (на основе моих исследований и данных ядра Apple). Но я знаю, что мне не хватает некоторых знаний, не могли бы вы объяснить мне лучше, пожалуйста? - person Japa; 17.11.2012
comment
Извините, вы далеко. Объект (X) является подклассом NSManagedObject, а не каким-то табличным представлением. Список не может быть делегатом какого-либо продукта. Ваш контроллер может быть делегатом вашего полученного контроллера результатов (который может отображать список продуктов). Все чисто. - person Mundi; 18.11.2012
comment
Разобрался с вопросом X. Когда я говорю список продуктов, я имею в виду табличное представление, в котором отображаются все продукты, вставленные другим табличным представлением (продукт, у которого есть кнопка «Сохранить»), должен ли я изменить свой didselectrow в списке продуктов или уделить больше внимания моему методу сохранения в продукте ?...Извините, что беспокою вас снова. - person Japa; 18.11.2012