2011-05-03 29 views
7

我在iPhone中使用地圖視圖的自定義地圖註記類。每當我從導航欄堆棧彈出我的地圖視圖時,我通常會在控制檯中看到一些警告。自定義地圖註釋中的警告iPhone

MapAnnotation被釋放,而關鍵值觀察者仍然註冊它。觀察信息被泄露,甚至可能被錯誤地附加到其他物體上。在NSKVODeallocateBreak上設置一個斷點,在調試器中停止。下面是當前觀測信息:

在我的代碼,我不使用國際志願者組織,因此無法理解爲什麼我將它添加到的MapView之前接收這些警告

回答

30

緯度和經度具有不同的界限:

  • (-90,90),用於緯度
  • (-180,180),用於長

傳遞這些邊界之外的值將導致自定義類被解除分配,因此會給您提供您收到的錯誤。確保您傳遞的是經緯度的正確值。

如果Apple爲此傳遞了一個邊界錯誤而不是早期發佈錯誤,那將非常好。這將已經救了我約5個小時的時間

+0

問題仍然存在於iOS7中。自從我使用ARC以來,我有點無助,並且無法對我的地圖註釋爲什麼發佈得太早進行映射。我很高興我找到了你的答案! +1 – 2014-01-15 12:15:11

0

你自動釋放您的註解?

如果是這樣,請嘗試分配它,將其添加到MapView,然後釋放它。

1

修正了它。我在註釋中使用了一對錯誤的經緯度,我改變了一樣,現在一切似乎都很完美,警告也消失了。

+0

您能否提供一些更詳細的信息來解決您的問題? – KronoS 2012-04-18 16:51:22

+0

@KronoS我使用了一對不正確的經緯度,我使用了正確的值並且再也沒有看到那個警告。 – sandy 2012-04-20 15:42:17

7

我得到了同樣的錯誤,你:

An instance 0xa975400 of class xxxxxx was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info: 
<NSKeyValueObservationInfo 0xa980eb0> (
<NSKeyValueObservance 0xa980e70: Observer: 0xa94f8a0, Key path: coordinate, Options: <New: NO, Old: NO, Prior: YES> Context: 0x0, Property: 0xa980ef0> 

如這裏指出,這是因爲我加入了MKAnnotation使用無效協調,以引起一個MKMapView。

我的解決方案是創建一個函數來檢查座標有效。

廣場+ MKAnnotation.m

我創造了我的地方類的類別和

#import "Place.h" 
#import <MapKit/MapKit.h> 

@interface Place (MKAnnotation) <MKAnnotation> 
- (BOOL)coordinateIsValid; 
... 
@end 

廣場+ MKAnnotation.m

@implementation Place (MKAnnotation) 

- (BOOL)coordinateIsValid 
{ 
    return CLLocationCoordinate2DIsValid(CLLocationCoordinate2DMake([self.latitude doubleValue],[self.longitude doubleValue])); 

} 
... 
@end 

我只加了註釋在我的ViewController如果該座標是有效的。

if([p coordinateIsValid]) { 
    [self.mapView addAnnotation:p]; 
}