Проблема выбора - PullRequest
       8

Проблема выбора

1 голос
/ 20 декабря 2009

Должно быть, я что-то неправильно понял. Я просто хочу использовать executeSelector: для вызова одного из моих собственных методов. Здесь у меня есть объявление метода в @interface:

-(void)forceReload;

К вашему сведению, весь этот код определен только для одного типа. А вот реализация метода и вызывающий метод:

-(void)forceReload {
    // code here...
}

-(void)entryActivityEditViewControllerDidFinish {

    // etc...

    DebugLog(@"self=%@", self);
    DebugLog(@"responds to selector=%@", [self respondsToSelector:@selector(forceReload:)] ? @"true" : @"false");
    [self forceReload]; // Works fine
    [self performSelector:@selector(forceReload:)]; // unrecognized selector
}

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

И в завершение приведу некоторое отладочное изложение, показывающее, что мой целевой объект («я») - это тот самый тип, который, как мне кажется, и который я отправляю соответствующему объекту. Я также включил вызов responsedsToSelector: и обнаружил, что мой объект не отвечает на forceReload: что еще больше смущает меня. С чего бы это?

0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:236): self=<EntryActivityTableViewController: 0x1259160>
0x1006030/-[EntryActivityTableViewController entryActivityEditViewControllerDidFinish] (EntryActivityTableViewController.m:237): responds to selector=false
2009-12-20 10:22:44.999 Workouts[407:207] *** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160
2009-12-20 10:22:45.017 Workouts[407:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[EntryActivityTableViewController forceReload:]: unrecognized selector sent to instance 0x1259160'

Пожалуйста, скажите мне, где мое понимание неверно. : -)

1 Ответ

3 голосов
/ 20 декабря 2009

Ваш метод не принимает аргументов, но ваш вызов @selector () запрашивает селектор, который принимает один аргумент. То, что вы хотите, это:

[self performSelector:@selector(forceReload)]; // unrecognized selector
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...