2011-09-19 96 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]; 

真的,这里的关键是,在注释类中,标题和字幕属性被声明为键入副本。这会为您分配的字符串创建一个新副本,因此可以在不引起您遇到的崩溃的情况下发布它。