Передача объектов модели из одного контроллера представления в другой в стеке навигации - PullRequest
1 голос
/ 03 июня 2011

У меня есть два UITableViewControllers.Один отображает список имен, и при нажатии на любую ячейку будет выдвигаться второй TableViewController, который позволяет пользователю редактировать имя в UITextField.

Теперь я могу передать строку имени из первого TableViewController во вторую,(Я делаю это, создавая свойство во втором TableViewController, который я устанавливаю непосредственно перед нажатием второго TableViewController) Но как мне передать отредактированную строку имени со второго на первое (чтобы я мог обновить первую таблицус отредактированным именем)?

Ответы [ 5 ]

2 голосов
/ 03 июня 2011

Я вижу в основном три варианта:

  1. Вы можете определить свою модель как одноэлементную, которая легко доступна из любого другого объекта.В этом случае подумайте о параллельном доступе к модели, она любая;

  2. имеет модель, закрытую для первого контроллера, но вместо передачи строки второму контроллеру передайте указатель намодель, так что вы можете читать и писать в нее;

  3. передают второму контроллеру указатель на первый, чтобы вы могли сигнализировать об этом (вызывая какой-то определенный метод);Это нормально, если вы создаете подкласс контроллера, в противном случае вам следует использовать делегата.

Четвертый вариант - использование уведомлений, но я думаю, что 1 или 2 - это путь.

1 голос
/ 03 июня 2011

Они подключены через навигационный контроллер?

Если это так, это может решить проблему

// in SecondViewController.m
NSArray* controllers = self.navigationController.viewControllers;
UITableViewController* firstViewController = [controllers objectAtIndex:controllers.count-2];
1 голос
/ 03 июня 2011

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

FirstController.h

   @property (nonatomic,retain)     NSMutableArray *myStrings;

FirstController.m

   @synthesize myStrings;

   init {
         self.myStrings = [NSMutableArray arrayWithCapacity:8];
   }


   didSelectRowAtIndexPath {

     SecondVC *vc = [[SecondVC new];
     [self.theStrings addObject:@"Original String"]; // or replaceAtIndex: indexPath.row
     vc.theStrings = self.myStrings;
     vc.theIndex   = indexPath.row;
     //push detail vc.
   }

SecondController.h

  @property (nonatomic, retain) NSMutableArray *theStrings;
  @property (nonatomic        ) int             theIndex;

SecondController.m

  @synthesize theStrings;
  @synthesize theIndex;

  doneEditingMethod {
       [self.theStrings replaceObjectAtIndex: self.theIndex withObject: myNewString];
   }
1 голос
/ 03 июня 2011

Может быть, вам стоит взглянуть на шаблон делегата, который может сэкономить вам много времени! : -)

Вы знаете, что это похоже на использование источника данных UITableView. С делегатом (или источником данных) вы можете запрашивать или устанавливать информацию для корневого контроллера.

Может быть, это лучший вариант! (так гуглите "цель-c делегат")

Удачи!

0 голосов
/ 03 июня 2011

Есть несколько способов сделать это.Лично я использую сторонний класс для размещения строк и просто ссылаюсь на этот класс при перемещении между UITableView.

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