【发布时间】:2015-06-20 05:23:21
【问题描述】:
我有一个滚动视图子类,它带有一个扩展 UIScrollViewDelegate 的自定义委托。我也想将该属性命名为“委托”,以便与 Apple 的模式保持一致。这是我正在尝试做的一个示例:
@protocol ScrollViewSubclassDelegate <UIScrollViewDelegate, UITextFieldDelegate>
- (void)additionalDelegateMethod;
@end
@interface ScrollViewSubclass : UIScrollView
@property (nonatomic, weak) id<ScrollViewSubclassDelegate> delegate;
@end
我还在实现中重写了 setDelegate 方法,因为我想让该委托成为 UITextField 子视图的委托。例如:
@implementation ScrollViewSubclass
- (void)setDelegate:(id<ScrollViewSubclassDelegate>)delegate
{
if (![_delegate isEqual:delegate]) {
_delegate = delegate;
self.myTextField.delegate = delegate;
}
}
@end
但是,当我这样做时,我收到以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_IVAR_$_UIScrollView._delegate", referenced from:
-[ScrollViewSubclass setDelegate:] in ScrollViewSubclass.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已尝试添加 @synthesize delegate; 和 @dynamic delegate;,正如其他一些 SO 帖子所提到的,但都没有奏效。
任何关于如何做到这一点的建议将不胜感激。
PS 显然我可以将委托属性命名为其他名称,但如果可能的话,我想避免这种情况。
【问题讨论】:
标签: ios objective-c inheritance delegates subclass