Переменная / свойство класса доступа xcode из другого контроллера представления - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть приложение UITabBar с 4 вкладками. Каждая вкладка имеет свой собственный ViewController.

Иногда я хочу получить доступ к переменным из Tab1ViewController в Tav2ViewControllerTab3.

Например:

Tab1ViewController.h

#import <UIKit/UIKit.h>
@interface Tab1ViewController : UIViewController {
NSMutableArray *contentArray;
}
@property (nonatomic, retain) NSMutableArray *contentArray;
@end

Tab2ViewController.m

#import "Tab2ViewController.h"
#import "Tab1ViewController.h"
@implementation Tab2ViewController
- (void) viewDidLoad {
NSLog(@"Data count Tab1: %@", [Tab1ViewController.contentArray count]);
}

Это не работает, потому что xcode ожидает, что contentArray будет методом. Но как я могу получить доступ к свойству из другого ViewController? Что я делаю не так?

Спасибо, Пат

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

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

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

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

Если вы хотите обмениваться данными между контроллерами, то создайте общий объект модели (или службу)для получения моделей, таких как ManagedObjectContext), чтобы сохранить эти данные и дать каждому контроллеру ссылку на них.Таким образом, делегат вашего приложения может построить эту модель и передать ее каждому контроллеру.Каждый контроллер может наблюдать за изменениями в модели и вносить в нее изменения по мере необходимости, при этом не нужно знать о других контроллерах, также использующих эту модель.

Доклад Apple WWDC о MVC может быть полезным руководством для вас.

1 голос
/ 26 апреля 2011

Есть ли у вас экземпляр Tab1ViewController? Вы пытаетесь получить доступ к свойству класса, а не к экземпляру класса. Это будет работать только если бы свойство было статичным. Я также должен предупредить вас, что вкладки, которые взаимодействуют друг с другом, могут указывать на некоторую неясность в дизайне вашего приложения. В идеале, ваши контроллеры представления должны общаться в центральном месте.

...