将HTML转换为纯文本以获取MapKit注释

时间:2011-09-19 16:08:19

标签: iphone ios string annotations mapkit

使用注释查看MapKit信息时出现问题。

3 个答案:

答案 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,反之亦然......