Вызов метода в определенном классе - PullRequest
0 голосов
/ 05 июля 2010

В настоящее время я делаю это, чтобы добавить кнопку на панель навигации для вызова метода SwitchViews.

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back to App" 
                                                                  style:UIBarButtonItemStyleBordered
                                                                 target:nil
                                                                action:@selector(switchViews:)];
self.navigationItem.leftBarButtonItem=backButton;
[backButton release];

Этот метод находится в другом классе (SwitchViewController), но он работает, поскольку я предполагаю, что вызов метода проходит через цепочку респондента, пока не найдет его в SwitchViewController.

Есть ли способ, которым я могу установить цель для своего класса вместо nil?

Угадайте, что это облегчит чтение, отладку и обслуживание кода.

Я уверен, что это простой ответ для более опытных программистов, чем я ...

Спасибо

1 Ответ

0 голосов
/ 06 июля 2010

Установка target на nil теоретически не должна работать вообще, но, возможно, она делает какие-то умные вещи, как вы говорите. Установка цели на ноль, по-видимому, приводит к действие отправляется по цепочке респондента. Не знал этого.

Чтобы установить его для вашего класса, сначала вам нужна ссылка на указанный класс. Кто держит этот класс? Делегат приложения? Может ли приложение-делегат передать ссылку на этот класс этому классу, поскольку это ему нужно? Если этот класс инициализируется программно, вы можете даже настроить метод init, чтобы получить новый аргумент (класс).

Как выглядит метод с приведенным выше фрагментом кода? Это метод инициализации? Метод viewDidLoad?

Если это метод init, и он вызывается из файла NIB (т.е. это initWithCoder:), тогда лучше всего просто взять ссылку непосредственно из делегата приложения, используя

((YOURAPPDELEGATE *)[[UIApplication sharedApplication] delegate]).THATCLASS

Вышеприведенное предполагает, что вы правильно настроили @property для THATCLASS (что является вашим предполагаемым target), например,

@property (nonatomic, retain) ExampleClass *THATCLASS;
...