Почему эта NSInvocation вызывает исключение?

У меня сейчас настоящий головной убор. Итак, NSTimer объект, NSMethodSignature объект и NSInvocation Объект зайти в бар. Вот остальная часть шутки:

NSMethodSignature *methodSig = [NSMethodSignature methodSignatureForSelector:@selector(setAlphaValue:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSig];
CGFloat alphaVal = 1.f;

[inv setSelector:@selector(setAlphaValue:)];
[inv setTarget:tabViewItem.view];
[inv setArgument:&alphaVal atIndex:2];

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.5f invocation:inv repeats:NO];

Вот что я получаю в консоли отладки:

+ [NSInvocation _invocationWithMethodSignature: frame:]: аргумент сигнатуры метода не может быть равен нулю

Редактировать: я не уверен, почему кто-то думал, что необходимо было отказаться от голосования на мой вопрос. Извините за попытку узнать что-то новое. На самом деле, вот поправка к моему первоначальному вопросу: что я должен был сделать по-другому? Должен ли я просто удалить пост, как только выяснил, в чем моя проблема? Я пытался следовать всему этикету переполнения стека, и я даже нашел время, чтобы оставить ответ на случай, что он может помочь кому-то еще. В следующий раз, должен ли я просто вернуться к своему вопросу и оставить ответ типа "nvm... понял это. Thx?" Или я должен просто оставить это здесь без ответа? Я уверен, что, черт возьми, я устала нажимать на ссылки только для того, чтобы вести к постам без ответа.

1 ответ

Решение

К сожалению. Я бросил пистолет. Завершение кода Xcode заставило меня думать, что methodSignatureForSelector: был метод класса NSMethodSignature, Всякий раз, когда я имею дело с классами, с которыми я обычно не связываюсь на регулярной основе, я обычно начинаю с ввода [NSClassImUnfamiliarWith, сопровождаемый пробелом. Это вызывает всплывающее окно завершения кода Xcode, в котором обычно есть все методы, которые можно вызвать. Я случайно выбрал унаследованный (?) Метод из NSObject думая, что это был метод класса. Я предполагаю, что это будет примером полиморфизма. Во всяком случае, я решил свою проблему, заменив NSMethodSignature с моим объектом: tabViewItem.view, Так что все вместе это выглядит так:

NSMethodSignature *methodSig = [tabViewItem.view methodSignatureForSelector:@selector(setAlphaValue:)];

Я не знаю, поможет ли это кому-нибудь еще, но, черт возьми, я отправлю это на всякий случай. Удачи!

Другие вопросы по тегам