私はGoogle Data APIs Objective-C Client Libraryを構築し、アプリケーション (GTMOAuth2 を含む) とリンクして動作させ、データを引き出すことができます。プロビジョニング API (まだ XML のみ) を使用する必要があるため、独自のアプリケーション内で必要な追加機能を構築しています。私は最終的にこれらすべてがどのように機能するかを理解し、カスタム要素を読むことに非常に近づいていると思いますが、何かが欠けています.
GDataServiceGoogle、GDataEntryBase、およびをサブクラス化して、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(そして、参照実装としてGDataServiceGoogleCalendar、GDataEntryCalendar、およびに取り組んできました)、私のサブクラスでは次のように実装しました。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要素とメソッド) と比較してきましたが、何が欠けているのかわかりません。
どうぞよろしくお願いいたします。