target-c: вызов функции void из другого контроллера - PullRequest
0 голосов
/ 13 ноября 2009

У меня есть пустота, как - (пустота) doSomething в конкретном контроллере. я могу вызвать его в этом контроллере через [self doSomething] , но я не знаю, как вызвать это void из другого файла .m

Я хочу вызвать его в действии - (IBAction): (id) отправитель

Я пытался использовать executeSelector, но в журнале я получил сообщение «unreconiezd selector send». Я понятия не имею, должен ли я использовать центр уведомлений или делегировать ...

Спасибо, Ронан.

Ответы [ 3 ]

6 голосов
/ 13 ноября 2009

У вас должен быть экземпляр первого контроллера (тот, в котором вы объявляете функцию) во втором контроллере.

FirstViewController *firstController = [[FirstViewController alloc] init];
[firstController doSomething];

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

+ (void) doSomething;

чтобы вы могли звонить из любого места с

[FirstViewController doSomething];
3 голосов
/ 13 ноября 2009

если у вас есть объект, для которого вы хотите вызвать его, и метод public, тогда вы просто:

[object doSomething];
0 голосов
/ 13 ноября 2009

Проблема в том, что у вас есть два контроллера, которые не знают о существовании друг друга. Центр уведомлений, безусловно, является способом решения этой ситуации: преимущество заключается в том, что вам не нужно устанавливать официальную связь между ними.

Метод делегата - это еще одна возможность, но тогда вам нужно либо установить соединение через IBOutlet в Интерфейсном Разработчике, либо вы должны заставить один контроллер создать другой контроллер и передать себя в качестве делегата. Это связывает их вместе более тесно, что может или не может быть целесообразным. Если единственное соединение между двумя контроллерами - это вызов одного - (void) метода, то я бы пошел с NSNotification.

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