//Editing begins ...
TV * currentTV = [[TV alloc] initWithEntity:entity insertIntoManagedObjectContext:context];
Редактирование не начинается, вы создаете новый объект прямо здесь. Вашему контроллеру представления нужна переменная экземпляра для хранения текущей сущности TV
, которую вы изменяете.
В созданном вами шаблонном проекте переменная detailItem
содержит управляемый объект, который вы в данный момент редактируете. Вы должны специально установить это как TV
объект и ссылаться на него вместо currentTV
в вашем коде detailViewController. Вы должны удалить все запросы на выборку и код контекста управляемого объекта - это не относится к вашему контроллеру подробного представления, им должен управлять главный контроллер представления.
Итак, в DetailViewController.h:
@property (strong, nonatomic) id detailItem;
становится
@property (strong, nonatomic) TV detailItem;
А в вашем методе collectSliderValue это должно выглядеть намного проще:
- (IBAction)collectSliderValue:(UISlider *)sender
{
if (sender == sizeSlider)
self.detailItem.size = [NSNumber numberWithFloat:sender.value];
}
Сохранение контекста управляемого объекта не должно происходить до тех пор, пока вы не вернетесь в контроллер подробных представлений, об этом позаботится делегат приложения.
В файле .m вашего основного контроллера деталей вам также может понадобиться импортировать файл TV.h, чтобы он знал, что TV является подклассом NSManagedObject
. Кроме того, приведение к телевизору при настройке элемента детализации:
self.detailViewController.detailItem = (TV*)selectedObject;