【发布时间】:2020-03-04 23:24:50
【问题描述】:
我有一个 UIView 的层次结构。它们的处理方式都不同,但如果嵌套,我无法让我的 setDelegate 触发。我收到一个崩溃异常 [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
【问题讨论】:
标签: objective-c inheritance delegates subclassing