我正在使用Gdata从Gmail帐户中提取联系人。我能够获取用户的一些细节(名称等),但当我尝试获取电子邮件时,我收到此错误:
-[GDataEntryBase emailAddresses]: unrecognized selector sent to instance
从我所读到的,我正在以正确的方式做到这一点。我错过了什么?
代码:
-(void)getGoogleContacts {
GDataServiceGoogleContact *service =
[[GDataServiceGoogleContact alloc] init];
NSString *username = @"username@gmail.com";
NSString *password = @"pass";
service = [[GDataServiceGoogleContact alloc] init];
[service setUserAgent:@"McGraggerSoft-GoogleContactUtility-1.0"];
[service setUserCredentialsWithUsername:username password:password];
ticket = [service fetchContactFeedForUsername:username delegate:self didFinishSelector:@selector(ticket:finishedWithFeed:error:)];
}
- (void)ticket:(GDataServiceTicket *)ticket finishedWithFeed:(GDataFeedContact *)feed error:(NSError *)error
{
if ([[feed entries] count] > 0) {
GDataEntryContact *firstContact = [[feed entries] objectAtIndex:0];
GDataTextConstruct *titleTextConstruct = [firstContact title];
NSString *title = [titleTextConstruct stringValue];
NSLog(@"first contact's title:%@", title);
GDataEmail *email = [[firstContact emailAddresses] objectAtIndex:0]; //<-- Crash
//NSString *ContactEmail = [email address];
//NSLog(@"ContactEmail: %@",ContactEmail);
}
}
这是我正在使用的项目:https://github.com/819419423/GDataWithGTMOauth2Example 您可以删除主控制器中的所有内容并添加上述方法以获取错误。
答案 0 :(得分:0)
您基本上是在没有它的对象中调用方法。在这种情况下,:
GDataEntryContact *firstContact = [[feed entries] objectAtIndex:0];
假设方法为emailAddresses
。所以我猜这个问题就出现了:
GDataEmail *email = [[firstContact emailAddresses] objectAtIndex:0]; //<-- Crash
如何解决?
在对象中实现方法emailAddresses
。
可能发生的另一件事是你的emailAddresses实际上是一个ivar,你只需要综合他的getter / setter方法,所以只需将它添加到你的GDataEmail.h文件中:
@property(nonatomic,strong)NSMutableArray *emailAddresses;
答案 1 :(得分:0)
在尝试获取GDataEntryContact
的实例时,您似乎得到了GDataEntryBase
的实例,因为错误消息告诉您。此类不提供方法emailAddresses
。请注意,Objective-C编译器不会阻止将“type”id赋值给 - 在这种情况下为firstContact
。所以你可能会想到一个GDataEntryContact
对象,但实际上它是GDataEntryBase
中的[[feed entries] objectAtIndex:0]
对象。
答案 2 :(得分:0)
显然我有一个旧版本的GData。我已经从下载部分下载了它,而不是执行 svn checkout 。之后一切正常。