我已经构建了Google Data APIs Objective-C 客户端库,并让它链接并与我的应用程序(包括 GTMOAuth2)一起工作,并且可以拉回数据。我需要使用Provisioning 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
)所以在这两者之间它真的必须是正确的班级。我的GDataEntryBase
子类quota
方法上有一个断点,它永远不会被绊倒,那么我在这里缺少什么?
如前所述,我一直在与 Calendar 的 Service/Feed/Entry 实现(特别是accessLevel
&color
元素和方法)进行比较,只是没有看到我缺少的内容。
提前感谢您提供的任何帮助。