Когда вы используете print()
, он просто печатает все на консоль, поэтому проверьте, запущено ли приложение, чтобы увидеть распечатанный вывод. То, что вы возвращаете («JSON posts») с вашей точки зрения, - это то, что возвращается клиенту в ответ.
Короткий ответ: можно возвратиться к делегату приложения как это:
YourAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
У Вас, вероятно, уже есть указатель на Ваш корневой контроллер представления в Вашем делегате приложения класс. И у Вас, вероятно, есть указатели на Ваши основные и вторичные контроллеры представления в корневом объекте контроллера. Так, Вы могли написать код как это:
SecondaryViewController *primary = delegate.rootController.primaryController;
Можно затем отправить сообщения в него к содержанию основы. Никакие выходы не требуются; просто свойства к каждому контроллеру представления.
Существует много более длинных ответов и также дискуссия о том, почему эта практика могла бы быть сомнительной, так как это представляет потенциально нежелательные связи между объектами. В "чистом" объектно-ориентированном проектировании Вы будете следовать чистому шаблону разработки с четкими связями между объектами в различных направлениях, разрешающих Вам лучше снова использовать код.
Другая опция состоит в том, чтобы передать в указателях на объекты, в которых класс будет нуждаться во время инициализации. Реализуйте новый initWithSomethingOrOther для своих классов контроллера представления и передайте объекты в как параметры. Кэшируйте эти указатели, в которых Вы нуждаетесь (не забывайте сохранять их) для более позднего использования.
Очевидный способ, чтобы сделать это должен определить протокол для делегата к вторичному контроллеру, который перечисляет методы, которые этому нужен первичный контроллер для обеспечения:
@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 вообще; Вы просто изменяетесь, любой класс должен теперь быть своим делегатом. Это экономит время в конечном счете.
Если контроллеры загружаются из NIB, Вы могли бы определить торговую точку на вторичном контроллере и подключить его к первичному контроллеру в интерфейсном разработчике.
Используйте NSNotificationCenter для отделенной коммуникации между объектами.