5

मैंने 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 तत्वों और विधि) के साथ तुलना कर रहे हैं और अभी देख नहीं है कि मैं क्या याद कर रहा हूँ कर रहा हूँ।

आपके द्वारा प्रदान की जा सकने वाली किसी भी सहायता के लिए अग्रिम धन्यवाद।

+2

+1 क्योंकि यह एक बहुत अच्छी तरह से गठित और विस्तृत प्रश्न है, और मेरा पहला विचार यह है कि लाइब्रेरी आधार "' GDataQuotaProperty' "वर्ग की तलाश में है और आपके उप-वर्ग के बारे में कुछ नहीं जानता है। यह ऐसा कुछ हो सकता है जो * एक श्रेणी के साथ पूरा किया जा सके, मुझे पता नहीं। मुझे इसके बारे में और कुछ सोचना होगा। –

+0

धन्यवाद, मैं मानता हूं कि यह संभावना है कि बेस क्लास सबक्लास नहीं ढूंढ सकता है। मुझे Google डेटा ऑब्जेक्टिव-सी पुस्तकालयों का उपयोग करके लोगों के कुछ अन्य उदाहरण मिल गए हैं और समान समस्याओं को ठीक करके हल किए गए समान "अपरिचित चयनकर्ता" त्रुटियां प्राप्त हो रही हैं, इसलिए ऐसा कुछ है जिसे मैंने माना है (हालांकि 'GDataObject.h' राज्य " विस्तार का वास्तविक उद्देश्य तत्वों को उन बच्चों को शामिल करने की अनुमति देना है जिन्हें वे "" के बारे में नहीं जानते हैं। – morgant

+0

मैंने कुछ और स्पष्टीकरणों के साथ प्रश्न अपडेट किया है, esp। '[उपयोगकर्ता कोटा]' उदाहरण कॉल में 'उपयोगकर्ता' चर के संबंध में। – morgant

उत्तर

1

मैं अपने GDataFeedBase उपवर्ग में classForEntries पद्धति लागू किया था और सही ढंग से इसे से मेरी GDataEntryBase उपवर्ग के वर्ग लौट रहा था, इस प्रकार है:

- (Class)classForEntries { 
    return [GDataEntryUser class]; 
} 

मैं एक ही GDataFeedBase उपवर्ग में standardKindAttributeValue के कार्यान्वयन छूट गए थे , जो Google प्रावधान API उपयोगकर्ता फ़ीड के मामले में उपयुक्त श्रेणी स्कीमा यूआरएल ("http://schemas.google.com/apps/2006#user" लौटा रहा होना चाहिए था)।

+ (NSString *)standardKindAttributeValue { 
    return @"http://schemas.google.com/apps/2006#user"; 
} 

एक बार addExtensionDeclarations, classForEntries, और standardKindAttributeValue सब सही ढंग से लागू किया गया है, GDataEntryBase सही ढंग से निर्धारित करने के लिए है कि मेरे उपवर्ग में वस्तुओं के लिए इस्तेमाल किया जाना चाहिए में सक्षम था: तो, मैं इस प्रकार है (हालांकि मैं वास्तव में एक निरंतर का उपयोग) लागू किया फ़ीड और इसलिए मेरे चयनकर्ताओं को पहचाना गया।

Google के ग्रेग रॉबिन्स को सही दिशा में इंगित करने के लिए बहुत धन्यवाद in this thread on the Google Data APIs Objective-C Client Libraries discussion group