Какова требуемая видимость метода действия в цепочке респондента iphone? - PullRequest
0 голосов
/ 25 июня 2010

В подклассе UIViewController я создаю элемент кнопки панели, который запускает событие в цепочке респондента:

UIBarButtonItem* editListsButton = [[UIBarButtonItem alloc] initWithTitle:@"Edit" style:UIBarButtonItemStyleBordered target:nil action:@selector(edit)];
self.navigationItem.leftBarButtonItem = editListsButton;
[editListsButton release];

В реализации подкласса UIViewController предка (то есть в файле .m) у меня есть следующее:

@interface GroupController (PrivateMethods)
    - (void) edit;
@end

- (void) edit {
    ... do something here ...
}

И, конечно, в соответствующем .h файле я не объявляю метод редактирования. Это была случайная ошибка с моей стороны.

Должно ли это работать надежно? Что требуется для того, чтобы объявить метод так, чтобы он получал события редактирования?

Кстати, у меня есть сообщения, что прикосновение к кнопке панели «Редактировать» приводит к сбою приложения при каждом касании, но только от нескольких из многих тысяч пользователей. Я не могу воспроизвести это.

1 Ответ

1 голос
/ 25 июня 2010

Для методов Objective-C нет "видимости", за исключением того, где вы прикрепляете объявление во время компиляции.Во время выполнения они все одинаковы.

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

- (IBAction)edit:(id)sender;

Обратите внимание, что IBAction на самом деле # определено как void.Используется только Интерфейсным Разработчиком.Поскольку вы делаете все программно, вы можете использовать void.Конечно, возникает вопрос о том, почему вы делаете вещи программно, поскольку это почти всегда пустая трата времени, но ... за рамками этого вопроса.

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

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

...