Как исправить предупреждения - PullRequest
0 голосов
/ 04 декабря 2010

В моем проекте iPhone появляется предупреждение «имя метода не найдено», «несколько методов с именем« имя метода »найдено».


// in TestFirst.h
-(void) testMethod:(int)a;<br>
// in TestFirst.m
TestSecond *ts = [[TestSecond alloc] init];
ts.delegate = self;<br>
// in TestSecond.h
id delegate;<br>
// in TestSecond.m
[delegate testMethod: 5]; // Warning: method name not found

Как разрешить подобные предупреждения?

Ответы [ 2 ]

3 голосов
/ 04 декабря 2010

Вы можете указать точный тип делегата:

TestFirst *delegate;

Или вы можете создать протокол:

@protocol SomeDelegate
- (void) testMethod: (int) a;
@end

@interface TestFirst : NSObject <SomeDelegate> {…}
@end

@interface TestSecond : NSObject
@property(assign) id <SomeDelegate> delegate;
@end

Или вы можете сохранить динамический ввод и импортировать правильные заголовки:

@interface TestSecond : NSObject {…}
@property(assign) id delegate;
@end

#import "TestFirst.h" // or AVAudioPlayer or whatever
@implementation TestSecond

- (void) somewhere {
    [delegate testMethod:5];
}
0 голосов
/ 04 декабря 2010

Возможно, это не лучший способ сделать это, но я видел, что большинство людей, использующих делегаты, используют следующий шаблон:

if ([delegate respondsToSelector:@selector(yourMethod)]) {
     [delegate performSelector:@selector(yourMethod)];
}

Вы можете добавить аргументы, используя executeSelector: withObject: и есть также методыпозволяя вам выполнять селектор в других потоках.

У вас не будет никаких ошибок, если вы объявите своего делегата как

id delegate;

или

NSObject<DelegateProtocol> * delegate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...