Iphone 自定义批注“访问未知的getter方法”

Iphone 自定义批注“访问未知的getter方法”,iphone,annotations,mapkit,getter-setter,Iphone,Annotations,Mapkit,Getter Setter,我已经创建了一个自定义的MKAnnotation类MapLocation。我在设置或获取属性方面没有任何问题,除了在这个方法中创建MKAnnotationView。我需要在这里执行此操作,因为它应该从注释的索引中查找位置类型,并为annotationView选择一系列自定义注释图像中的一个 在MapLocation.h和.m中多次尝试设置自定义getter和setter之后,我将其归结为无法复制强制getter title,将其重命名为title2,并尝试获取其返回值。这是我的代码: -(MKA

我已经创建了一个自定义的MKAnnotation类MapLocation。我在设置或获取属性方面没有任何问题,除了在这个方法中创建MKAnnotationView。我需要在这里执行此操作,因为它应该从注释的索引中查找位置类型,并为annotationView选择一系列自定义注释图像中的一个

在MapLocation.h和.m中多次尝试设置自定义getter和setter之后,我将其归结为无法复制强制getter title,将其重命名为title2,并尝试获取其返回值。这是我的代码:

-(MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *placemarkIdentifier=@"Map Location Identifier";
NSString *str1=annotation.title;
NSString *str2=annotation.title2;
if([annotation isKindOfClass:[MapLocation class]]) {
    MKAnnotationView *annotationView=(MKAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
    if (annotationView==nil) {
        annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier];
    }
    else
        annotationView.annotation=annotation;


    return annotationView;
}
return nil;
}

在第4行,title被正确返回,但是第5行对copied方法的调用在主题中产生错误消息


我确实查看了XCode文档,但我可能只是不知道如何声明它,以便此方法可以看到它。奇怪的是,它看到的是title getter,而不是title2副本。

尝试将线从点符号更改为:

NSString *str2=[annotation title2];
错误应该会消失

发生的事情是编译器被告知注释是MKAnnotation。事实上,你知道它有什么其他的方法是无关紧要的;编译器不是通灵的——它只知道注释遵循MKAnnotation协议,仅此而已。它看到title getter的原因是因为title是在MKAnnotation中定义的

您还可以通过使用强制转换来修复此问题:

MapLocation *mapLocation = (MapLocation *)annotation;
现在,你可以说

NSString *str2=mapLocation.title2;

因为您已经告诉编译器mapLocation是mapLocation obejct。

尝试将线从点符号更改为:

NSString *str2=[annotation title2];
错误应该会消失

发生的事情是编译器被告知注释是MKAnnotation。事实上,你知道它有什么其他的方法是无关紧要的;编译器不是通灵的——它只知道注释遵循MKAnnotation协议,仅此而已。它看到title getter的原因是因为title是在MKAnnotation中定义的

您还可以通过使用强制转换来修复此问题:

MapLocation *mapLocation = (MapLocation *)annotation;
现在,你可以说

NSString *str2=mapLocation.title2;

因为您已经告诉编译器mapLocation是一个mapLocation obejct。

当我看到您已经回答了问题时,我实际上正在研究如何声明mapLocation协议。所以现在我的注释有了索引,可以将它们链接到我需要的任何东西,并且显示了位置类型的正确图像。谢谢虽然我以前尝试过,但这不起作用:NSString*str2=[annotation title2];上面写着——标题2是未知的。无法在接口中声明它。对于像我这样的新手来说有点奇怪,因为编译器不应该担心消息,它们是运行时的。我现在明白了,它会抱怨没有演员阵容的额外属性,谢谢!当我看到您已经回答时,我正在研究如何声明MapLocation协议。所以现在我的注释有了索引,可以将它们链接到我需要的任何东西,并且显示了位置类型的正确图像。谢谢虽然我以前尝试过,但这不起作用:NSString*str2=[annotation title2];上面写着——标题2是未知的。无法在接口中声明它。对于像我这样的新手来说有点奇怪,因为编译器不应该担心消息,它们是运行时的。我现在明白了,它会抱怨没有演员阵容的额外属性,谢谢!