मैंने Google Data APIs Objective-C Client Library बनाया है और इसे मेरे एप्लिकेशन (सहित GTMOAuth2) से जोड़ना और काम करना है और डेटा को वापस खींच सकते हैं। मुझे Provisioning API (अभी भी एक्सएमएल-केवल) के साथ काम करने की ज़रूरत है, इसलिए मैं अपने स्वयं के आवेदन के भीतर आवश्यक अतिरिक्तताओं का निर्माण कर रहा हूं। मुझे लगता है कि मैंने आखिरकार यह पता लगाया है कि यह सब कैसे काम करता है और मैं कस्टम तत्व पढ़ने के करीब बहुत हूं, लेकिन मुझे कुछ याद आ रहा है।Google डेटा उद्देश्य-सी क्लाइंट लाइब्रेरी से GDataEntryBase को उप-वर्गीकरण करते समय मुझे "अपरिचित चयनकर्ता" त्रुटियां क्यों मिल रही हैं?
मैंने GDataServiceGoogle
, GDataEntryBase
, और GDataFeedBase
उपखंडित किया है और मुझे सही डेटा वापस मिल रहा है। मैं एक सरल & सीधा तत्व प्रकार: quota
से शुरू कर रहा हूं। में उपयोगकर्ता फ़ीड, कोटा तत्व इस तरह दिखता है:
तो, मैं निम्नलिखित मूल्य निर्माण जोड़ दिया है:
@interface GDataQuotaProperty : GDataValueConstruct <GDataExtension>
+ (NSString *)extensionElementURI;
+ (NSString *)extensionElementPrefix;
+ (NSString *)extensionElementLocalName;
@end
@implementation GDataQuotaProperty
+ (NSString *)extensionElementURI { return kGDataNamespaceGApps; }
+ (NSString *)extensionElementPrefix { return kGDataNamespaceGAppsPrefix; }
+ (NSString *)extensionElementLocalName { return @"quota"; }
@end
और मैं अपने GDataEntryBase
उपवर्ग के लिए निम्न विधियों को जोड़ दिया है:
- (GDataQuotaProperty *)quota;
- (void)setQuota:(GDataQuotaProperty *)val;
के रूप में कार्यान्वित इस प्रकार है:
- (GDataQuotaProperty *)quota {
return [self objectForExtensionClass:[GDataQuotaProperty class]];
}
- (void)setQuota:(GDataQuotaProperty *)val {
[self setObject:val forExtensionClass:[GDataQuotaProperty class]];
}
documented in the comments in GDataObject.h
के रूप में (और मैं GDataServiceGoogleCalendar
, GDataEntryCalendar
के बंद काम कर रहा है, और GDataFeedCalendar
एक संदर्भ कार्यान्वयन के रूप में), मेरे GDataBaseEntry
उपवर्ग में मैं addExtensionDeclarations
को क्रियान्वित किया है इस प्रकार है:
- (void)addExtensionDeclarations {
[super addExtensionDeclarations];
Class entryClass = [self class];
// User extensions
[self addExtensionDeclarationForParentClass:entryClass
childClasses:[GDataQuotaProperty class], nil];
}
हालांकि, जब मैं कोशिश मेरी कॉलबैक में इस प्रकार quota
विधि कॉल करने के:
GDataTextConstruct *titleTextConstruct = [user title];
NSString *title = [titleTextConstruct stringValue];
GDataQuotaProperty *quotaConstruct = [user quota];
NSString *quota = [quotaConstruct stringValue];
मैं एक अपवाद है और इस त्रुटि मिलती है
2012-11-19 12:42:22.667 Google Apps Open Directory Sync[47679:903] -[GDataEntryBase quota]: unrecognized selector sent to instance 0x2836d0
उपर्युक्त उदाहरण में मुझे उपयोगकर्ता का नाम (तत्व का title
) त्रुटि के बिना सही तरीके से वापस मिलता है। इसके अलावा, user
वस्तु मेरी GDataEntryBase
उपवर्ग के प्रकार के वास्तव में है, नहीं GDataEntryBase
ही (डीबगर में सत्यापित), के साथ साथ मेरी GDataFeedBase
उपवर्ग में classForEntries
विधि सही ढंग से GDataEntryBase
की मेरी उपवर्ग के वर्ग रिटर्न) उन दोनों के बीच तो यह वास्तव में सही वर्ग होना है। मेरे पास GDataEntryBase
सबक्लास की quota
विधि पर ब्रेकपॉइंट है जिसे कभी नहीं जाया जा रहा है, तो मैं यहां क्या खो रहा हूं?
के रूप में उल्लेख किया है, मैं सेवा/फ़ीड/एंट्री कैलेंडर के लिए कार्यान्वयन (विशेष रूप से accessLevel
& color
तत्वों और विधि) के साथ तुलना कर रहे हैं और अभी देख नहीं है कि मैं क्या याद कर रहा हूँ कर रहा हूँ।
आपके द्वारा प्रदान की जा सकने वाली किसी भी सहायता के लिए अग्रिम धन्यवाद।
+1 क्योंकि यह एक बहुत अच्छी तरह से गठित और विस्तृत प्रश्न है, और मेरा पहला विचार यह है कि लाइब्रेरी आधार "' GDataQuotaProperty' "वर्ग की तलाश में है और आपके उप-वर्ग के बारे में कुछ नहीं जानता है। यह ऐसा कुछ हो सकता है जो * एक श्रेणी के साथ पूरा किया जा सके, मुझे पता नहीं। मुझे इसके बारे में और कुछ सोचना होगा। –
धन्यवाद, मैं मानता हूं कि यह संभावना है कि बेस क्लास सबक्लास नहीं ढूंढ सकता है। मुझे Google डेटा ऑब्जेक्टिव-सी पुस्तकालयों का उपयोग करके लोगों के कुछ अन्य उदाहरण मिल गए हैं और समान समस्याओं को ठीक करके हल किए गए समान "अपरिचित चयनकर्ता" त्रुटियां प्राप्त हो रही हैं, इसलिए ऐसा कुछ है जिसे मैंने माना है (हालांकि 'GDataObject.h' राज्य " विस्तार का वास्तविक उद्देश्य तत्वों को उन बच्चों को शामिल करने की अनुमति देना है जिन्हें वे "" के बारे में नहीं जानते हैं। – morgant
मैंने कुछ और स्पष्टीकरणों के साथ प्रश्न अपडेट किया है, esp। '[उपयोगकर्ता कोटा]' उदाहरण कॉल में 'उपयोगकर्ता' चर के संबंध में। – morgant