(я нашел несколько вопросов , обсуждающих эту идею, но я не нашел решения для моей проблемы.)
Я добавил этот удобный метод в качестве категории в NSObject. (Я добавил другие методы, поэтому мне все еще интересен ответ, даже если вы не согласны с этим конкретным удобным методом.)
@implementation NSObject (MyCategory)
- (void)performInvocationOnMainThread:(NSInvocation *)invocation waitUntilDone:(BOOL)waitForMainThread;
@end
Тогда у меня есть протокол, который я определил:
@protocol MyDelegateProtocol <NSObject>
- (void)myDelegateProtocolMethod;
@end
Затем я объявляю делегата как свойство моего класса, реализующего указанный протокол.
@property (nonatomic, assign) id <MyDelegateProtocol> delegate;
Но когда я пытаюсь вызвать метод NSObject, я добавил в свою категорию примерно так:
NSInvocation *invocation = [self.delegate invocationForSelector:@selector(someSelector:withArg:)];
Я получаю это предупреждение
'-performInvocationOnMainThread:waitUntilDone:' not found in protocol(s)
Если я назначу своего делегата как (NSObject *)
, я не получу предупреждение. Что я делаю неправильно? Не похоже, что я мог (или должен?) Добавлять методы к существующему протоколу, не создавая «вспомогательный протокол» и не используя его с тех пор. (Какой вид победы над точкой добавления методов в NSObject имеется в виду.)
NSInvocation *invocation = [(NSObject *)self.delegate invocationForSelector:@selector(someSelector:withArg:)];