识别的选择器给我“无法识别的选择器发送到实例”

时间:2013-04-25 05:26:31

标签: ios objective-c cocoa-touch cocoa gmail

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

3 个答案:

答案 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 。之后一切正常。