отправка данных вокруг сложных навигационных стеков - PullRequest
0 голосов
/ 16 января 2012

Я хотел бы получить какое-то мнение, пример и код о том, как все дозируют это ..

До сих пор я прекрасно справлялся с использованием протоколов и делегатов для передачи информации обратно через контроллер navigaion от представления к представлению.

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

По сути, я собираюсь сделать следующее:

Navigation stack
- First View
-- second View
--- Third View - current view.

Передача данных от третьего к первому виду является целью. Я знаю, как получить доступ к первому контроллеру представления ... Я просто не знаю, как получить информацию для него на таком расстоянии ... Главная вещь, сдерживающая меня, это то, что я не могу объявить делегата в первом представлении для Протокол делегирования третьего вида без падения приложения.

Ответы [ 4 ]

1 голос
/ 16 января 2012

Это как это сделать, если ваш делегат определен в третьем представлении,

В третьем представлении:

 YourFirstViewController *fvc = [self.navigationController.viewControllers objectAtIndex:0];
    self.delegate = fvc;
    [self.delegate yourMethodHere];

убедитесь, что ваш контроллер первого просмотра соответствует протоколу

<thirdViewDelegate>

и импортировать третий вид в первый вид.h

0 голосов
/ 16 января 2012

В зависимости от данных, которые вы хотите передать обратно, вы можете использовать Singleton, NSUserDefault, pass it via AppDelegate, use delegation pattern, or just use set of properties. The decision should be made by you according to the design and the requirement. Предполагая, что вы просто хотите вернуть строку, вы можете выполнить следующие шаги:

Объявление свойства в FirstViewController.

@property (nonatomic, retain) NSString *thePassbackValue;

Доступ к экземпляру FirstViewController в ThirdView.

FirstViewController *fvc = [self.navigationController.viewControllers objectAtIndex:0];

Установить значение для свойства,

fvc.thePassbackValue = @"someValue";

Доступ к значению обратно в первом представлении,

// На первый взгляд,

if(self.thePassbackValue != nil)
{
//Use the value
NSLog(@"the value %@", self.thePassbackValue);
}
0 голосов
/ 16 января 2012

Рассматривали ли вы хранение данных на устройстве и доступ к ним отдельно.Вы можете хранить все свои данные в базе данных sqlite и обновлять данные, когда контроллер представления вызывает:

– viewWillAppear:
0 голосов
/ 16 января 2012

Я предполагаю использовать observer pattern с NSNotificationCenter классом и NSNotification классом.Вы можете прочитать официальный документ apple здесь .Эта страница документа содержит ссылку NSNotification Programming Topics внутри.Данные могут быть отправлены наблюдателям с помощью NSDictionary для userInfo.

При использовании шаблона наблюдателя эти контроллеры представления могут иметь слабую связь.Он более гибок при изменении оригинального дизайна при разработке проекта.

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