2011-05-13 18 views
1

我已經到了一個地步,我開始認爲這可能實際上是Xcode中的一個錯誤,但可以肯定,我在問在這裏。我正在開發使用MapKit和CoreLocation的應用程序,但是在某個時候,我開始接受警告「屬性」座標「需要方法」-coordinate'「。起初我以爲我做錯了什麼,因爲我的確使用了屬性座標MKPointAnnotation,但是在我評論出來之後,警告仍然存在。怪異的「屬性」座標「需要方法」-coordinate'「錯誤

事實上,在我評論了幾乎所有的東西之後,我仍然得到了警告。它告訴我文件名和行號(帶有@end的行),但是如果我在該文件中搜索座標,則沒有任何結果。 .h也沒有聲明屬性,所以我真的失去了這個錯誤的來源......當然,我可以給你提供代碼,但我已經評論了很多東西,它不會在這裏發佈它真的沒什麼意義。只是一些沒有任何實際內容的內存管理方法,除了發送消息到super ...

+0

我也有問題,認爲它是一個xcode的東西。 – 2011-05-13 19:22:31

+0

我假設你已經清理並重建,因爲它出現了?您的任何課程都聲稱符合MKAnnotation? Xcode 3或4?同時檢查你是否在正確的位置獲得了所有@end指令。 Xcode可能因錯過或錯位的@ end而變得非常困惑。 – kball 2011-05-13 23:00:16

+0

它通常會在您聲明屬性並且不合成它時發生。 – 2011-05-14 02:47:55

回答

2

Xcode是正確的告訴你,你需要實施-coordinate。這是MKAnnotation協議的非可選方法。

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

座標 註釋的中心點(指定 作爲地圖座標)。 (必填)(只讀)

@屬性(非原子,只讀) CLLocationCoordinate2D協調

我相信你無法合成協調的原因是不是因爲你沒有申報財產,但因爲你沒有告訴編譯器使用什麼存儲。

添加

CLLocationCoordinate2D coordinate; 

到您的類接口的字段(變量)節將編譯器它正在尋找存儲。

或者你可以指定使用此語法編譯器在其他存儲:

@synthesize coordinate=myCoordinateVariable; 

但這些都不是真正的問題,因爲你沒有使用合成。

只需自己實施該方法!所需的部分只讀,所以你只需要實現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會爲您自動創建存儲。

+0

啊,現在更有意義了! MKAnnotation是否使用該座標屬性?一切似乎目前正常工作,我只是想避免這種錯誤。 – 2011-05-14 16:12:11

+0

MKAnnotation不是一個類,它只是一個協議,所以它沒有實現,並且本身不使用任何東西。但MapKit中有很多方法需要符合MKAnnotation的對象。如果你不使用任何這些,那麼你不需要將你的對象標記爲符合MKAnnotation。 – kball 2011-05-14 18:55:29

0

我在一個應用中遇到了同樣的問題一年多。沒有人能夠提供解釋。我只是想將mapview添加到我的最新應用程序中,並且只是將MapKit框架添加到項目中,聲明支持MKMapViewDelegate和MKAnnotation協議,然後我爲MapKit/MapKit.h執行了#imports,並且MapKit/MKAnnotation.h。構建應用程序和Bang!有警告。

所以,我注意到了MKAnnotation協議聲明和魔術般的警告消失了。我可以得出的唯一結論是這是一個Xcode問題。

0

這個問題很奇怪。 Ball剛剛建議添加以下行,並且我的警告消失了。

@synthesize coordinate = myCoordinateVariable;

感謝球的信息。

相關問題