Я ищу ясности, и я просто застрял в грязи. Я надеюсь, что я рядом. Заранее признателен за помощь.
Настройка
У меня есть три контроллера представления: контроллер представления таблицы, первый контроллер представления и второй контроллер представления. Контроллер табличного представления имеет «новую» кнопку и ячейки таблицы. Новая кнопка подключена к переходу addStuff, а ячейка таблицы к переходу editStuff к первому контроллеру представления. Первый контроллер вида аналогично настроен с двумя кнопками, подключенными ко второму контроллеру вида через сегменты addMoreStuff и editMoreStuff.
В модели есть две сущности: «вещи» и «еще больше», настроенные подклассами NSManaged Object. Существует взаимно-однозначное отношение с обратным. (Отношения 'moreStuff' от Stuff и отношения 'stuff' от MoreStuff).
Существуют методы делегата для возврата из второго контроллера представления в первый контроллер представления.
-(void)secondViewController:(SecondViewController *)controller didAddMoreStuff:(MoreStuff *)moreStuff;
-(void)secondViewController:(SecondViewController *)controller didEditMoreStuff:(MoreStuff *)moreStuff;
По сути, в первом и втором контроллерах представления есть текстовые поля. Текстовые поля первого контроллера представления предоставляют данные для сущности 'stuff', а вторые текстовые поля контроллера представления для сущности 'moreStuff'.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"editMoreStuff"]) {
// Make and instance of the destination view controller and set it to the destination view controller.
SecondViewController* svc = segue.destinationViewController;
svc.delegate = self;
// I want the moreStuff associated with the current stuff to populate.
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
MoreStuff* moreStuff = [MoreStuff moreStuffInManagedObjectContext:context];
savc.moreStuffToEdit = moreStuff;
}
else if ([segue.identifier isEqualToString:@"addMoreStuff"]) {
// Make and instance of the destination view controller and set it to the destination view controller.
// This is called when no moreStuff has been called before. Need to prohibit if it has been.
SecondViewController* svc = segue.destinationViewController;
svc.fetchedResultsController = self.fetchedResultsController;
svc.delegate = self;
//show moreStuff if it is available
}
}
Вопрос 1. Если данные вводятся в первый контроллер представления, а затем активируется переход «addMoreStuff», данные «материал» не сохраняются. Пользователь добавляет данные во второй контроллер textFields контроллера представления, а затем нажимает «done», сохраняя объект «moreStuff» с помощью шаблонного метода «saveContext», который предоставляет шаблон, и возвращается к первому контроллеру представления. Теперь, если человек решит вернуться ко второму контроллеру представления с помощью сеанса editMoreStuff, как мне предварительно заполнить textFields объектом 'moreStuff'?
Я думал, что это будет что-то вроде этого в viewDidLoad SecondViewController, но не радость:
- (void)viewDidLoad {
[super viewDidLoad];
if (self.moreStuffToEdit != nil) {
self.firstTextField.text = self.moreStuffToEdit.first;
self.secondTextField.text = self.moreStuffToEdit.second;
}
}
Вопрос 2. Где / как мне установить связь с объектом «вещи»? Я предполагаю, что это что-то вроде этого:
stuffObject.moreStuff = moreStuffObject;
но я не уверен, когда это сделать. Спасибо всем.