奇怪的“属性'坐标'需要方法' - 坐标'”错误

时间:2011-05-13 19:01:38

标签: iphone objective-c

我已经开始认为这可能是Xcode中的一个错误,但可以肯定的是,我在这里问它。我正在研究使用MapKit和CoreLocation的应用程序,但在某些时候我开始收到警告“属性'坐标'需要方法'-coordinate'”。起初我以为我做错了,因为我使用MKPointAnnotation的属性坐标,但在我评论出来后,警告仍然存在。

事实上,在我评论了几乎所有内容之后,我仍然会收到警告。它告诉我文件名和行号(带@end的行),但如果我在该文件中搜索坐标,则没有任何结果。 .h也没有声明属性,所以我真的迷失了这个错误的来源......当然,我可以为你提供代码,但我已经评论了很多东西,它没有在这里发布它真的没有任何意义。除了向super发送消息之外,只有一些内存管理方法没有任何实际内容......

3 个答案:

答案 0 :(得分:2)

Xcode告诉您需要实现-coordinate是正确的。这是MKAnnotation协议的非可选方法。

http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKAnnotation_Protocol/Reference/Reference.html

  

坐标中心点(指定   作为地图坐标)   注解。 (必填)(只读)

     

@property(非原子,只读)   CLLocationCoordinate2D坐标

我认为你无法合成坐标的原因不是因为你没有声明属性,而是因为你没有告诉编译器要使用什么存储。

添加

CLLocationCoordinate2D coordinate;

到类接口的fields(variables)部分将为编译器提供它正在寻找的存储空间。

或者您可以使用以下语法将编译器指向其他存储:

@synthesize coordinate=myCoordinateVariable;

但这些都不重要,因为你不必使用合成。

亲自实施该方法!所需的部分是readOnly所以你只需要实现getter。

-(CLLocationCoordinate2D)coordinate {
    return myCoordinate;
}

@property和@synthesize主要是快捷方式。 @synthesize只是对编译器说 - “如果我还没有实现这些访问器”。但通常你会声明这样的属性,对吗?

@implementation MyClass : NSObject {
    NSString *someString;
}

@property (nonatomic, retain) NSString *someString;

然后你合成它。 @synthesize为@property暗示的声明创建了适当的实现:

-(NSString *)someString;
-(void)setSomeString:(NSString *);

并使用您在声明实例变量时提供的存储,NSString * someString。

顺便说一句,在Xcode 4中,@ synthesize会自动为您创建存储空间。

答案 1 :(得分:0)

我的一个应用程序在一年多的时间里遇到了同样的问题。从来没有人能够提供解释。我刚刚将mapview添加到我的最新应用程序中,并且只是将MapKit Framework添加到项目中,声明支持MKMapViewDelegate和MKAnnotation协议然后我为MapKit / MapKit.h执行#imports并且MapKit / MKAnnotation.h。构建应用程序和Bang!有警告。

所以,我评论了MKAnnotation协议声明,并且像魔术一样警告消失了。我可以得出的唯一结论是这是一个Xcode问题。

答案 2 :(得分:0)

这个问题很奇怪。我刚刚添加了Ball提示的以下行,我的警告消失了。

@synthesize coordinate = myCoordinateVariable;

感谢Ball提供信息。