#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;