основные отношения данных и несколько контроллеров представления - PullRequest
0 голосов
/ 11 января 2012

Я ищу ясности, и я просто застрял в грязи. Я надеюсь, что я рядом. Заранее признателен за помощь.

Настройка

У меня есть три контроллера представления: контроллер представления таблицы, первый контроллер представления и второй контроллер представления. Контроллер табличного представления имеет «новую» кнопку и ячейки таблицы. Новая кнопка подключена к переходу 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;

но я не уверен, когда это сделать. Спасибо всем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...