Проектирование приложения мультипредставления на iPhone

Когда вы используете print(), он просто печатает все на консоль, поэтому проверьте, запущено ли приложение, чтобы увидеть распечатанный вывод. То, что вы возвращаете («JSON posts») с вашей точки зрения, - это то, что возвращается клиенту в ответ.

8
задан Tommy 5 March 2009 в 19:38
поделиться

4 ответа

Короткий ответ: можно возвратиться к делегату приложения как это:

YourAppDelegate *delegate = [[UIApplication sharedApplication] delegate];

У Вас, вероятно, уже есть указатель на Ваш корневой контроллер представления в Вашем делегате приложения класс. И у Вас, вероятно, есть указатели на Ваши основные и вторичные контроллеры представления в корневом объекте контроллера. Так, Вы могли написать код как это:

SecondaryViewController *primary = delegate.rootController.primaryController;

Можно затем отправить сообщения в него к содержанию основы. Никакие выходы не требуются; просто свойства к каждому контроллеру представления.

Существует много более длинных ответов и также дискуссия о том, почему эта практика могла бы быть сомнительной, так как это представляет потенциально нежелательные связи между объектами. В "чистом" объектно-ориентированном проектировании Вы будете следовать чистому шаблону разработки с четкими связями между объектами в различных направлениях, разрешающих Вам лучше снова использовать код.

Другая опция состоит в том, чтобы передать в указателях на объекты, в которых класс будет нуждаться во время инициализации. Реализуйте новый initWithSomethingOrOther для своих классов контроллера представления и передайте объекты в как параметры. Кэшируйте эти указатели, в которых Вы нуждаетесь (не забывайте сохранять их) для более позднего использования.

7
ответ дан 5 December 2019 в 15:26
поделиться

Очевидный способ, чтобы сделать это должен определить протокол для делегата к вторичному контроллеру, который перечисляет методы, которые этому нужен первичный контроллер для обеспечения:

@protocol SecondaryControllerDelegate <NSObject>
- (void)secondaryController:(SecondaryController*)secondaryController 
             frobFooWithBar:(Bar*)myBar;
- (BOOL)secondaryController:(SecondaryController*)secondaryController
           shouldTwiddleBaz:(Baz*)currentBaz;
@end

Теперь добавьте свойство делегата к SecondaryController:

@interface SecondaryController : UIViewController {
    id <SecondaryControllerDelegate> delegate;
    ...
}

// delegates are one of the few places you don't retain an object
@property (assign) id <SecondaryControllerDelegate> delegate;
...

В разделе реализации SecondaryController синтезируйте свойство делегата. (Не выпускайте его в деструкторе.), Когда SecondaryController должен общаться с PrimaryController, он должен назвать соответствующий метод на делегате.

Теперь заставьте свой PrimaryController реализовать протокол SecondaryControllerDelegate:

@interface PrimaryController : UIViewController <SecondaryControllerDelegate> {
...

Реализуйте методы делегата в PrimaryController.

Наконец, установите Ваш PrimaryController сам как делегата SecondaryController. Точно, как Вы делаете это будет зависеть от того, создаете ли Вы SecondaryController в пере или нет. Если Вы делаете, установите связь там; в противном случае сделайте его после выделения и init SecondaryController.

Почему Вы делаете эту песню и танец? Ну, когда необходимо представить другой контроллер между Основным устройством и Вторичным устройством, или использовать Вторичное устройство в другом месте в приложении или даже использовать Вторичное устройство в другом приложении (у меня есть один контроллер, который привыкает в трех из моих четырех приложений), Вы не должны изменять SecondaryController вообще; Вы просто изменяетесь, любой класс должен теперь быть своим делегатом. Это экономит время в конечном счете.

4
ответ дан 5 December 2019 в 15:26
поделиться

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

0
ответ дан 5 December 2019 в 15:26
поделиться

Используйте NSNotificationCenter для отделенной коммуникации между объектами.

0
ответ дан 5 December 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: