-1
我有一个简单协议称为内的属性OnSuggestionTextChangedObjective-C中,协议作为另一协议
@protocol OnSuggestionTextChanged <NSObject>
-(void)onTextChanged:(NSString*)newText;
@end
我有另一个称为TextEditable协议具有这种协议作为属性
#import <Foundation/Foundation.h>
#import "OnSuggestionTextChanged.h"
@protocol TextEditable <NSObject>
@required
-(void)setTextString:(NSString*)text;
-(NSString*)textString;
-(void)notifySuggestionButtonPressed;
-(NSInteger)cursorPosition;
@property(nonatomic,weak)id<OnSuggestionTextChanged> onSuggestionTextChange;
@end
但在我的自定义UITextView
它符合协议TextEditable
。
当我尝试访问属性OnSuggestionTextChanged
我得到一个:
无法识别选择为[CustomTextView onSuggestionTextChanged] (不为onTextChanged)
这是很奇怪因为Xcode不会引发编译器错误而是运行时错误。
你能告诉我,我想要做什么是真的可能。如果是这样,为什么我会得到无法识别的选择器?
以防万一你们不相信我。
如果一个协议包含一个@属性,那* NOT *表示该属性现在是所有实现类的一部分。相反,它在遵守协议的类(如你的'UITextView'子类)中负责保证属性的存在。请参阅:http://stackoverflow.com/a/844785/88111另外,正如@rmaddy在下面提到的,将'@ synthesize'添加到您的子类应该为您生成getters/setters。 – 2014-09-04 14:27:10
在符合'TextEditable'协议的类中,尝试添加'@synthesize onSuggestionTextChange;'。 – rmaddy 2014-09-04 14:27:26
在协议中使用属性是不好的做法。你应该重新考虑你的协议。 – 2014-09-04 14:35:16