使用注释查看MapKit信息时出现问题。
答案 0 :(得分:1)
我遇到了类似的问题。你不是疯了。我相信这是MapKit代码中的一个错误。 Annotation对象不会创建自己传递给它的字符串的副本。当您的字符串超出范围时,地图会产生错误的引用。在传递字符串之前尝试重新分配字符串。像这样:
NSString *tempT = [[NSString alloc] initWithString:itemT];
NSString *tempA = [[NSString alloc] initWithString:itemA];
addAnnotation = [[MapAnnotation alloc] initWithCoordinate:essai :tempT :tempA];
然后在你完成地图显示之前不要释放它们。
答案 1 :(得分: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];
实际上,这里的关键是在注释类中,标题和副标题属性被声明为类型副本。这会生成您为其分配的字符串的新副本,因此可以在不导致崩溃的情况下释放它。
答案 2 :(得分:0)
我在上面的代码中看不到stringByStandardizingWhitespace方法调用...如果你能发布有错误的代码会很有帮助。使用调试器知道错误发生的位置......
还有一个错误与您指定的语法/错误无关但稍后会影响逻辑:
您正在分配gps_long标签tpo lat,反之亦然......