Предупреждения «Несовместимые типы указателей» в Xcode 4.2 (iOS 5.0)

#iphone #ios #cocoa-touch #xcode4 #ios5

#iPhone #iOS #cocoa-touch #xcode4 #ios5

Вопрос:

Когда я обновил свой Xcode с 4.0 до 4.2 (с iOS 5.0 SDK), я начинаю получать несколько предупреждений в своем коде, где я использую код:

 self.delegate = self;
 

Предупреждение: несовместимые типы указателей, присваиваемые ‘NSObject *’ из ‘MyClass *’

Здесь self.delegate установлено значение MyDelegate object и self является MyClass объектом.

 @protocol MyDelegate <NSObject>
- (void)myResponse:(NSDictionary *)response;
- (void)myError:(id)errorData;
@end


@interface MyClass : NSObject <MyDelegate> {

}
 

Эти предупреждения не появляются в версии 4.0.

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

Комментарии:

1. как выглядит ваш файл .h? объявляет ли он, что класс реализует <MyDelegate> ?

2. кроме того, почему вы объявляете делегатом своего класса самого себя? разве это не противоречит цели делегирования?

3. Можете ли вы опубликовать @interface @protocol объявления and для своего класса и протокола?

4. Я объявляю свойство @property (неатомное, присваиваю) NSObject <MyDelegate> *делегат; в MyClass.h и протокол MyDelegate также определены в том же классе интерфейса. Обычно делегат устанавливается для других объектов, но из-за некоторой бизнес-логики мне нужно выполнить методы делегирования самим объектом MyClass.

5. написано ли в верхней части вашего файла .h @interface MyClass : NSObject <MyDelegate> ?

Ответ №1:

Вы должны объявить свой делегат следующим образом

 id<MyDelegate> delegate;
 

и свойство как

 @property(nonatomic,assign)   id <MyDelegate>   delegate;