5

私はGoogle Data APIs Objective-C Client Libraryを構築し、アプリケーション (GTMOAuth2 を含む) とリンクして動作させ、データを引き出すことができます。プロビジョニング API (まだ XML のみ) を使用する必要があるため、独自のアプリケーション内で必要な追加機能を構築しています。私は最終的にこれらすべてがどのように機能するかを理解し、カスタム要素を読むことに非常に近づいていると思いますが、何かが欠けています.

GDataServiceGoogleGDataEntryBase、およびをサブクラス化して、GDataFeedBase正しいデータを取得しています。シンプルでわかりやすい要素タイプから始めます: quota. ユーザー フィードでは、クォータ要素は次のようになります。

<apps:quota limit="2048"/>

そこで、次の値構造を追加しました。

@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]];
}

のコメントに記載されているようにGDataObject.h(そして、参照実装としてGDataServiceGoogleCalendarGDataEntryCalendar、およびに取り組んできました)、私のサブクラスでは次のように実装しました。GDataFeedCalendarGDataBaseEntryaddExtensionDeclarations

- (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(デバッガーで検証)、さらにサブクラスのclassForEntriesメソッドは のGDataFeedBaseサブクラスのクラスを正しく返すGDataEntryBaseため、2つの間で実際に正しい必要がありますクラス。GDataEntryBaseサブクラスのメソッドにトリップされないブレークポイントがありますquotaが、ここで何が欠けていますか?

前述のように、Calendar の Service/Feed/Entry 実装 (特にaccessLevel&color要素とメソッド) と比較してきましたが、何が欠けているのかわかりません。

どうぞよろしくお願いいたします。

4

1 に答える 1