Objective-C,协议作为另一个协议内的属性

时间:2014-09-04 14:21:56

标签: ios objective-c

我有一个简单的协议叫做 OnSuggestionTextChanged

@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不会抛出编译器错误但是会出现运行时错误。

请告诉我,我想要做的事情是否真的可行。如果是这样,为什么我会得到无法识别的选择器?

万一你们不相信我。

enter image description here

1 个答案:

答案 0 :(得分:0)

在这里回答我自己的问题:

  协议中定义的

属性不是自动合成的,而是需要在符合协议的类中合成它们。

另外,我没有收到编译时错误,但是有一个警告,因为@ Cy-4AH声明说:

  

自动属性合成不会合成协议中声明的属性

感谢大家的上述评论。