2011-09-19 29 views

回答

0

我看不到stringByStandardizingWhitespace方法調用你粘貼的上述代碼...如果你可以發佈有錯誤的代碼將是有幫助的。使用調試器知道在哪裏出錯是發生......

同樣一個錯誤,是沒有關係的,你指定的語法/錯誤,但會影響後面的邏輯:

你TPO LAT分配gps_long標籤和反之亦然...

1

我遇到了類似的問題。你並不瘋狂。我相信這是MapKit代碼中的一個錯誤。 Annotation對象不會創建它自己的傳遞給它的字符串的副本。當你的字符串超出範圍時,地圖會作出不正確的參考。嘗試重新分配字符串,然後再通過它們。像這樣:

NSString *tempT = [[NSString alloc] initWithString:itemT]; 
NSString *tempA = [[NSString alloc] initWithString:itemA]; 
addAnnotation = [[MapAnnotation alloc] initWithCoordinate:essai :tempT :tempA]; 

然後在您完成顯示地圖之前不要釋放它們。

+0

見Rickay的答案,他找到了根本問題。 – Jonesy

1

我遇到了與Jonesy提到的完全相同的問題,但的一個修復程序。我不知道你有什麼樣的班級爲您的註解,但我用這樣的:

Annotation.h:

#import <Foundation/Foundation.h> 
#import <MapKit/MapKit.h> 
#import <UIKit/UIKit.h> 

@interface LocationAnnotation : NSObject <MKAnnotation> { 
    CLLocationCoordinate2D coordinate; 
    NSString* title; 
    NSString* subtitle; 
} 

@property (nonatomic, assign) MKPinAnnotationColor pinColor; 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 
@property (nonatomic, copy) NSString* title; 
@property (nonatomic, copy) NSString* subtitle; 

- (id)initWithCoordinate:(CLLocationCoordinate2D) c 
        title:(NSString*) t 
       subtitle:(NSString*) st; 

- (void)moveAnnotation:(CLLocationCoordinate2D) newCoordinate; 

- (NSString*)subtitle; 

- (NSString*)title; 

@end 

而且Annotation.m:

#import "LocationAnnotation.h" 

@implementation LocationAnnotation 

@synthesize coordinate, pinColor, title, subtitle; 

- (NSString *)subtitle { 
return subtitle; 
} 

- (NSString *)title { 
    return title; 
} 

-(id)initWithCoordinate:(CLLocationCoordinate2D) c 
        title:(NSString*)t 
       subtitle:(NSString*)st 
{ 
    coordinate = c; 
    self.title = t; 
    self.subtitle = st; 
    return self; 
} 

- (void)moveAnnotation:(CLLocationCoordinate2D)newCoordinate 
{ 
    coordinate = newCoordinate; 
} 

- (void)dealloc 
{ 
    [title release]; 
    [subtitle release]; 
    [super dealloc]; 
} 

@end 

來實現它:

Annotation* ann = [[[Annotation alloc] initWithCoordinate:startLocation title:someStringAutoreleasedOrNot subtitle:someOtherStringAutoreleasedOrNot] autorelease]; 
[yourMapView addAnnotation:ann]; 

真的,這裏的關鍵是,在註釋類中,標題和字幕屬性被聲明爲鍵入副本。這會爲您分配的字符串創建一個新副本,因此可以在不引起您遇到的崩潰的情況下發布它。