Цель-C: Как Класс может безопасно вызывать глобальный метод? - PullRequest
0 голосов
/ 28 июня 2011

Я попытался и получил исключение "SIGBRT". В Global.m у меня есть methodBGlobal().

В ClassA я включил Global.h , чтобы использовать methodGlobal(). ClassA.methodA() содержит methodGlobal().

Тогда у меня есть кнопка в Global.m . Поскольку я не знаю, как правильно вызвать methodGlobal() в Global.m . Поэтому я вызываю экземпляр methodGlobal() через ClassA.

[mybutton addTarget:ClassA instance action:@selector(methodA:) ...];

Не работает. Я получил исключение "SIGBRT" и я не знаю, был ли вызван methodGlobal () в ClassA.methodA () или нет? Я хочу, чтобы метод Global работал.

Ответы [ 3 ]

1 голос
/ 28 июня 2011

вы можете сделать это, сделав метод класса, например + (void) doAction, теперь вы можете использовать этот метод с именем класса, например [ClassName doAction]

1 голос
/ 28 июня 2011

Здесь необходимо учесть две вещи.

  1. Если метод является классовым методом , тогда цель должна быть [Класс ClassA] .
  2. Если в сигнатуре метода нет аргументов, например, - (void) methodA; , тогда в * 1015 не должно быть двоеточия (":").* @ селектор .Таким образом, селектор должен быть просто @ селектор (methodA) .

Наконец, метод addTarget: должен выглядеть следующим образом:

[mybutton addTarget:[ClassA class] action:@selector(methodA) ...];

Справочные материалы:

  1. Target-Action из компетенций приложения Cocoa для iOS.
  2. Механизм целевого действия из Руководства по основам какао.
1 голос
/ 28 июня 2011

Попробуйте это:

[mybutton addTarget:[ClassA class] action:@selector(methodA:) ...];
...