Google Data APIs Objective-C Client Library'u oluşturdum ve uygulamamla bağlantı kurup çalışmamı sağlayın (GTMOAuth2 dahil) ve verileri geri çekebilir. Provisioning API (hala sadece XML) ile çalışmam gerekiyor, böylece kendi uygulamamda ihtiyacım olan eklemeleri yapıyorum. Sonunda tüm bu çalışmaların nasıl olduğunu anladım ve özel elemanları okumak için çok yaşıyorum, ama bir şey eksik.GDataEntryBase'i Google Data Objective-C İstemci Kitaplığından alt sınıflara ayırırken neden "tanınmayan seçici" hatalarını alıyorum?
GDataServiceGoogle
, GDataEntryBase
ve GDataFeedBase
alt sınıflarını oluşturdum ve doğru verileri alıyorum. Basit bir & düz eleman türü ile başlıyorum: quota
. Kullanıcılar beslemek yılında kota öğesi şöyle görünür: Yani
, ben şu değer yapısı ekledik:
@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
Ve ben GDataEntryBase
alt sınıf için aşağıdaki yöntemleri ekledik: olarak Uygulanan
- (GDataQuotaProperty *)quota;
- (void)setQuota:(GDataQuotaProperty *)val;
aşağıdaki gibidir:
- (GDataQuotaProperty *)quota {
return [self objectForExtensionClass:[GDataQuotaProperty class]];
}
- (void)setQuota:(GDataQuotaProperty *)val {
[self setObject:val forExtensionClass:[GDataQuotaProperty class]];
}
Ancak
- (void)addExtensionDeclarations {
[super addExtensionDeclarations];
Class entryClass = [self class];
// User extensions
[self addExtensionDeclarationForParentClass:entryClass
childClasses:[GDataQuotaProperty class], nil];
}
ben çalıştığınızda: documented in the comments in GDataObject.h
gibi
(ve GDataServiceGoogleCalendar
, GDataEntryCalendar
kapalı çalışıyoruz ve bir referans uygulaması olarak GDataFeedCalendar
) aşağıdaki gibi benim GDataBaseEntry
alt sınıfta ben addExtensionDeclarations
uyguladık benim geri aramasında şöyle quota
yöntemi çağırmak için:
GDataTextConstruct *titleTextConstruct = [user title];
NSString *title = [titleTextConstruct stringValue];
GDataQuotaProperty *quotaConstruct = [user quota];
NSString *quota = [quotaConstruct stringValue];
bir istisna ve bu hatayı alıyorum
2012-11-19 12:42:22.667 Google Apps Open Directory Sync[47679:903] -[GDataEntryBase quota]: unrecognized selector sent to instance 0x2836d0
Yukarıdaki örnekte, kullanıcının adını (elemanın title
) hatasız bir şekilde doğru şekilde geri alıyorum. Ayrıca, user
nesnesinin GDataEntryBase
alt sınıfının aslında GDataEntryBase
alt sınıfının kendisi değil (hata ayıklayıcısında doğrulanmış), benim GDataFeedBase
alt sınıfımdaki classForEntries
yönteminin doğru değeri GDataEntryBase
alt sınıfımın sınıfını döndürür) gerçekten doğru sınıf olmak zorunda. GDataEntryBase
subclass'ın quota
metodu üzerinde hiçbir zaman takılmayan bir kırılma noktası var, bu yüzden burada ne eksik var?
belirtildiği gibi, Takvim için Servis/Yem/Giriş uygulanması (özellikle accessLevel
& color
elemanları ve yöntemler) ile karşılaştırılarak oldum ve ben eksik sadece görmüyorum.
Sağladığınız her türlü yardım için şimdiden teşekkür ederiz.
- (Class)classForEntries {
return [GDataEntryUser class];
}
aynı GDataFeedBase
alt sınıfta standardKindAttributeValue
uygulanmasını kaçırmıştı şu şekildedir: benim GDataFeedBase
alt sınıfında classForEntries
yöntemi hayata geçirdiklerini ve doğru olarak ondan benim GDataEntryBase
alt sınıfının sınıf dönüyordu iken
+1, çünkü bu oldukça iyi biçimlendirilmiş ve ayrıntılı bir sorudur ve ilk düşüncem kütüphanenin "GDataQuotaProperty" adlı temeli aradığı ve alt sınıfınız hakkında hiçbir şey bilmediği. Bu, bir kategoriyle başarabilecek bir şey olabilir, bilmiyorum. Bunu biraz daha düşünmeliyim. –
Teşekkürler, temel sınıfın alt sınıfı bulamamasının bir olasılık olduğunu kabul ediyorum. Google Data Object-C kitaplıklarını kullanan ve bağlantı sorunlarını gidererek çözülen benzer "tanınmayan seçici" hatalar almanın birkaç örneğini buldum, bu yüzden düşündüğüm bir şey var ("GDataObject.h" ifadelerine rağmen " Uzantıların asıl amacı, öğelerin "" hakkında bilmeyebilecekleri çocukları içermesine izin vermektir. – morgant
Soruyu bir kaç tane daha açıklamayla güncelledim. "kullanıcı kotası" örnek çağrısındaki 'kullanıcı' değişkeni ile ilgili. – morgant