मैं एक संपत्ति के साथ एक सरल प्रोटोकॉल है:मुख्य मान एक प्रोटोकॉल वस्तु पर अवलोकन
@protocol StopsSource <NSObject>
@property (retain,readonly) NSArray * stops;
@end
मैं कहीं और करने के लिए परिवर्तन को सुनने के लिए कोई मुख्य-मान पर्यवेक्षक जोड़ रहा " बंद हो जाता है "संपत्ति बदल गया है:"
id<StopsSource> source = ...
[source addObserver:self
forKeyPath:@"stops"
options:NSKeyValueObservingOptionNew
context:nil];
कोड काम करता है कि में होने की उम्मीद के रूप में मैं जब observeValueForKeyPath ईवेंट प्राप्त संपत्ति "बंद हो जाता है।
warning: '-addObserver:forKeyPath:options:context:' not found in protocol(s)
'addObserver' विधि NSObject करने के लिए एक वर्ग में परिभाषित किया गया है:
@interface NSObject(NSKeyValueObserverRegistration)
वहाँ किसी भी तरह से यह चेतावनी ड्रॉप करने XCode पाने के लिए है असली झुंझलाहट addObserver फोन पर एक संकलक चेतावनी है ? यह मेरी समझ है कि प्रोटोकॉल श्रेणियों को अपनाने नहीं कर सकते हैं, इसलिए मुझे यकीन नहीं है कि एनएसकेईवैल्यू ऑब्सर्वर पंजीकरण प्रक्रिया को मेरे प्रोटोकॉल में कैसे लाया जाए, प्रोटोकॉल में घोषणाओं की प्रतिलिपि बनाने से कम, जो एक हैक जैसा प्रतीत होता है।
मुझे पता है कि यह एक छोटी सी समस्या है, जिसमें यह केवल एक कंपाइलर चेतावनी है, लेकिन मुझे यह जानने में दिलचस्पी है कि इसका समाधान करने का कोई "सही" तरीका है या नहीं।
Abizern देखते हैं जवाब है, लेकिन अपने विशिष्ट समस्या के लिए , NSObject * स्रोत = ... –