0

我正在使用 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 您可以删除主控制器中的所有内容并添加上述方法以获取错误。

4

3 回答 3

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;
于 2013-04-25T06:08:49.537 回答
0

在尝试获取您的实例时,GDataEntryContact您似乎得到GDataEntryBase了错误消息中的实例。而且这个类不提供方法emailAddresses。请注意,Objective-C 编译器不会阻止将“类型”id 分配给 - 在这种情况下 - firstContact。所以你可能想有一个GDataEntryContact对象,但实际上它是一个GDataEntryBase对象[[feed entries] objectAtIndex:0]

于 2013-04-25T06:09:00.277 回答
0

显然我有一个旧版本的 GData。我已经从下载部分下载了它,而不是进行svn checkout。之后一切正常。

于 2013-04-28T05:41:48.860 回答