我已经开始认为这可能是Xcode中的一个错误,但可以肯定的是,我在这里问它。我正在研究使用MapKit和CoreLocation的应用程序,但在某些时候我开始收到警告“属性'坐标'需要方法'-coordinate'”。起初我以为我做错了,因为我使用MKPointAnnotation
的属性坐标,但在我评论出来后,警告仍然存在。
事实上,在我评论了几乎所有内容之后,我仍然会收到警告。它告诉我文件名和行号(带@end
的行),但如果我在该文件中搜索坐标,则没有任何结果。 .h也没有声明属性,所以我真的迷失了这个错误的来源......当然,我可以为你提供代码,但我已经评论了很多东西,它没有在这里发布它真的没有任何意义。除了向super
发送消息之外,只有一些内存管理方法没有任何实际内容......
答案 0 :(得分:2)
Xcode告诉您需要实现-coordinate是正确的。这是MKAnnotation协议的非可选方法。
坐标中心点(指定 作为地图坐标) 注解。 (必填)(只读)
@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)
@synthesize coordinate = myCoordinateVariable;
感谢Ball提供信息。