У меня есть класс со свойством делегата. Любой, кто хочет быть делегатом, должен соблюдать протокол. Я определил все так:
#import <UIKit/UIKit.h>
@protocol TheDelegateProtocol;
@interface MyClass : UIView {
id<TheDelegateProtocol> theDelegate;
}
@property (nonatomic, assign) id<TheDelegateProtocol> theDelegate;
@end
@protocol TheDelegateProtocol<NSObject>
@required
- (void)fooBarWithFoo:(CGFloat)foo;
@end
Теперь сумасшедшая вещь: у меня есть другой класс, который хочет быть делегатом. Таким образом, он соответствует этому протоколу, например:
#import <Foundation/Foundation.h>
@class MyClass; // forward declaration. importet in implementation.
@protocol TheDelegateProtocol; // need forward declaration here, right?
@interface OtherClass : NSObject <TheDelegateProtocol> {
// ivars
}
@end
Я не могу заставить это работать. В нем говорится: «Не найдено определение протокола« TheDelegateProtocol ». Хорошо, этот протокол определен в MyClass, и я импортирую MyClass в реализацию. Есть идеи, что там не так?
Что-то понял: В методе, где я пытаюсь назначить протокол, он говорит мне, что OtherClass не соответствует протоколу. Но это так! Это бессмысленно. Я также добавил метод протокола в шапке ....