私は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
、およびに取り組んできました)、私のサブクラスでは次のように実装しました。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
(デバッガーで検証)、さらにサブクラスのclassForEntries
メソッドは のGDataFeedBase
サブクラスのクラスを正しく返すGDataEntryBase
ため、2つの間で実際に正しい必要がありますクラス。GDataEntryBase
サブクラスのメソッドにトリップされないブレークポイントがありますquota
が、ここで何が欠けていますか?
前述のように、Calendar の Service/Feed/Entry 実装 (特にaccessLevel
&color
要素とメソッド) と比較してきましたが、何が欠けているのかわかりません。
どうぞよろしくお願いいたします。