gpt4 book ai didi

objective-c - 注释在 MapKit 、 iOS 上不显示标题/副标题

转载 作者:行者123 更新时间:2023-11-29 04:33:53 25 4
gpt4 key购买 nike

我正在解析一些带有一些兴趣点的数据,并尝试使用 MapKit 框架在 map 上显示它们。我为 map 上的对象创建了一个自定义类,我称之为 MyLocation。

MyLocation.h:

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

@interface MyLocation : NSObject <MKAnnotation> {
NSString *_name;
NSString *_address;
NSInteger _eventId;
CLLocationCoordinate2D _coordinate;
NSString *title;
NSString *subtitle;

}

@property (nonatomic , copy) NSString *name;
@property (nonatomic , copy) NSString *address;
@property (nonatomic, assign) NSInteger eventId;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;

- (id)initWithName:(NSString*)name address:(NSString*)address coordinate:(CLLocationCoordinate2D)coordinate;

@end

我的位置.m:

#import "MyLocation.h"

@implementation MyLocation
@synthesize name = _name;
@synthesize eventId=_eventId;
@synthesize address = _address;
@synthesize coordinate = _coordinate;
@synthesize title;
@synthesize subtitle;



- (id)initWithName:(NSString*)name address:(NSString*)address coordinate:(CLLocationCoordinate2D)coordinate {
if ((self = [super init])) {
_name= [name copy];
_address = [address copy];
_coordinate = coordinate;
}
return self;
}

- (NSString *)title {
if ([_name isKindOfClass:[NSNull class]]) {
NSLog(@"11111111");
return @"Unknown charge";
}
else{
NSLog(@"222222");
return _name;

}
}

- (NSString *)subtitle {
NSLog(@"HAHAHAHAA");
return _address;
}

@end

然后在我的 viewController 上我这样做:

//showing on map the points of interests that are stored on "eventList"
int i=0;
for (parsedItem *event in self.eventsList) {
CLLocationCoordinate2D coordinate;
coordinate.latitude = event.latitude;
coordinate.longitude = event.longitude;
if(i==0){
//numbers show map zoom. 500,500 = map stretches 500 meters to the North and the South of current location
MKCoordinateRegion region =
MKCoordinateRegionMakeWithDistance (coordinate,1000,1000);
[mapView setRegion:region animated:NO];
}
MyLocation *eventAnnotation = [[MyLocation alloc] initWithName:event.typeEvent address:event.titleEvent coordinate:coordinate] ;
eventAnnotation.name = event.typeEvent;
eventAnnotation.address = event.titleEvent;
eventAnnotation.eventId = i;
i++;
[mapView addAnnotation:eventAnnotation];
}

后来我使用更多代码为注释提供图像,所有内容都显示在 map 上,但是如果我单击注释,我看不到带有标题和副标题的窗口。我只看到注释,但没有单击它们时应该获得的额外信息。

我猜这行代码有问题:

MyLocation *eventAnnotation = [[MyLocation alloc] initWithName:event.typeEvent address:event.titleEvent coordinate:coordinate] ;

有什么想法吗?

编辑

只是补充一点,我也使用这个功能:

- (MKAnnotationView *)mapView:(MKMapView *)mapView2 viewForAnnotation:(id <MKAnnotation>)annotation {

static NSString *identifier = @"MyLocation";
if ([annotation isKindOfClass:[MyLocation class]]) {
NSLog(@"I got into the class!!!");
MKPinAnnotationView *annotationView = (MKPinAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
if (annotationView == nil) {
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier];
} else {
annotationView.annotation = annotation;
}

annotationView.enabled = YES;
annotationView.canShowCallout = YES;
MyLocation *eventAnnotation=annotation;


if ([eventAnnotation.address isEqualToString: @"Culture_07/02/2012"]) {
NSLog(@"Mphkeeee");
annotationView.image=[UIImage imageNamed:@"culture.png"];
//annotation.title = @"Holla!";
} else if ([eventAnnotation.address isEqualToString: @"Sports_06/29/2012"]) {
annotationView.image=[UIImage imageNamed:@"sports.png"];
} else if ([eventAnnotation.address isEqualToString: @"Accident_06/29/2012"]) {
annotationView.image=[UIImage imageNamed:@"accident.png"];
} else if ([eventAnnotation.address isEqualToString: @"Problem_06/29/2012"]) {
annotationView.image=[UIImage imageNamed:@"problem.png"];
} else if ([eventAnnotation.address isEqualToString: @"Traffic_07/02/2012"]) {
annotationView.image=[UIImage imageNamed:@"traffic.png"];
} else if ([eventAnnotation.address isEqualToString: @"Music_06/29/2012"]) {
annotationView.image=[UIImage imageNamed:@"music.png"];
}

return annotationView;

}

return nil;
}

最佳答案

titlesubtitle 使用自定义 getter 方法,而不是显式设置这些属性,这对于 map View 来说是没问题的。

您的标注未显示的原因是 title (返回 _name - 设置为 event.typeEvent)返回一个 nil 或空字符串。

您的 getter 方法正在检查 _name 是否属于 NSNull 类型,但它可能是 NSString 并且仍然是 nil 或空字符串。

titlenil 或空字符串时,注释将不会显示标注(即使 canShowCallout 设置为 ,即使 subtitle 返回非空值)。

因此,typeEvent 很可能是 nil 或空字符串。

关于objective-c - 注释在 MapKit 、 iOS 上不显示标题/副标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11310224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com