-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