Передача объектов модели из одного контроллера представления в другой в стеке навигации

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

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

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

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. вы можете определить свою модель как одноэлементный, который легко доступен из любого другого объекта. В этом случае подумайте о параллельном доступе к модели, это любой;

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

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

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

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

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

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

Удачи !

Связаны ли они с контроллером навигации?

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

 // in SecondViewController.m NSArray* controllers = self.navigationController.viewControllers; UITableViewController* firstViewController = [controllers objectAtIndex:controllers.count-2]; 

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

  • Проблема с кнопкой UITableView «проведите по экрану»
  • UITableview dequeueReusableCellWithIdentifier дублирует строки
  • Как избавиться от пустого пространства перед UITableView?
  • ui тестирование xcode, как нажать на кнопку сокета таблицы с запросом на запрос
  • Измените существующие повторно используемые ячейки с помощью метода cellForRowAtIndexPath:
  • iOS - наличие двух видов таблиц и других элементов под одним TableViewController
  • UITableView, uisplitviewcontroller - способ управления detailview?
  • TableView не показывает более 10 строк
  • Как получить все значения массива при поиске определенных значений в ячейке tableview с использованием Obejctive C?
  • Подсветка ячеек таблицы
  • UILabel показывает только первую строку текста, несмотря на то, что я установил label.numberOfLines = 0
  • Interesting Posts

    Создание приложения, такого как приложение «Настройки по умолчанию» – мне нужно множество диспетчеров представлений?

    Приложение Iphone, которое запускает веб-сайт без строки url

    Фоновая задача удаленного уведомления приостановлена ​​через некоторое время

    Показать UIView на Mac

    Объект изображения Xcode5 пейзаж / портретное изображение

    ios – shoud UIAlertView будет использоваться в возвращающемся блоке NSUrlConnection?

    Если я не использую в tableview, функция загрузки работает, если я использую его сбой

    открытие файла ics из каталога документов в UIWebView или в приложении «Календарь»

    Мой запрос reloaddata не вызывает методы делегата в UItableviewcontroller?

    Как установить выделенный цвет заголовка подкласса UIButton?

    Отключить гиперссылки в файле PDF в UIWebView

    Невозможно связать () сокет внутри Apple Calendar (dylib injection)

    Примените цвет текста и индекс к NSMutableString в объективе c

    NSDateFormatter нет места для am / pm

    cocos2d + iphone: Каков самый простой способ работы с векторными изображениями в iOS?

    Давайте будем гением компьютера.