У меня есть иерархия UIViews. Все они обрабатываются по-разному, но если они вложены, я не могу получить мой setDelegate of super. Я получаю исключение cra sh [ThirdClass setDelegate:] нераспознанный селектор, отправленный экземпляру. Это на самом деле происходит независимо от того, какой (подкласс) я использую SecondClass или ThirdClass, но если я использую (FirstClass), все работает так, как должно, но при любом подклассе делегата он не распознает вызов. Я упростил то, что я делаю ниже, и если я вызываю свой первый класс отдельно внутри моего MainControlInterface, все работает как надо. Я уверен, что я делаю что-то здесь не так, но не могу определить, что это такое. Если кто-то может помочь, это будет высоко оценено, спасибо.
@protocol FirstClassDataSource, FirstClassDelegate;
@interface FirstClass : UIView
@property (nonatomic, weak_delegate) __nullable id<FirstClassDataSource> dataSource;
@property (nonatomic, weak_delegate) __nullable id<FistClassDelegate> delegate;
@end
@protocol FirstClassDataSource <NSObject>
- (NSInteger)doSomething:(FirstClass *)class;
@optional
- (NSInteger)doSomethingElse:(FirstClass *)class;
@end
@protocol FirstClassDelegate <NSObject>
@optional
- (void)handleMoreDelegateMethods:(FirstClass *)class;
@end
@implementation FirstClass
- (void)setDataSource:(id< FirstClassDataSource >)dataSource
{
if (_dataSource != dataSource)
{
_dataSource = dataSource;
if (_dataSource)
{
[self reloadData];
}
}
}
- (void)setDelegate:(id< FirstClassDelegate>)delegate
{
if (_delegate != delegate)
{
_delegate = delegate;
if (_delegate && _dataSource)
{
[self setNeedsLayout];
}
}
}
@end
@interface SecondClass : FirstClass
-(id)sencondClassesPrivateMethods;
@end
@interface ThirdClass : secondClass
-(id)thirdClassPrivateMethods;
@end
@interface MainControlInterface : UIView <FirstClassDataSource, FirstClassDelegate>
-(ThirdClass *)thirdClass;
@end
@implementation MainControlInterface
-(void)didMoveToSuperview{
ThirdClass *mythirdSubClass = [self thirdClass];
mythirdSubClass.delegate = self;
mythirdSubClass.dataSource = self;
}
@end