gpt4 book ai didi

objective-c - 将数据存储在 MKAnnotation 中?

转载 作者:太空狗 更新时间:2023-10-30 03:17:58 25 4
gpt4 key购买 nike

所以我对 Xcode 和 Objective-C 还很陌生。我有几个具有各种属性的 ArtPiece 对象存储在一个数组中。然后我将它们作为 MKAnnotations 添加到 map View 中。我需要做的是发送对它们在单击时来自的数组位置的引用。我相信 MKAnnotations 只有数据成员标题、图像和位置,所以当我从对象创建 MKAnnotation 时,注释不会保留任何其他属性。所以,我的问题是,我如何设法保留对创建注释的对象的数组位置的引用,以便我可以将其发送给其他方法,以便它们可以从数组中检索有关该对象的附加信息以获取详细信息 View 等。有没有办法在注释中存储单个 int 值?我不认为还有其他想法吗?

这是我的 ArtPiece.h:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface ArtPiece : NSObject <MKAnnotation>{

NSString *title;
NSString *artist;
NSString *series;
NSString *description;
NSString *location;
NSString *area;
NSNumber *latitude;
NSNumber *longitude;
UIImage *image;
}

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *artist;
@property (nonatomic, retain) NSString *series;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *location;
@property (nonatomic, retain) NSString *area;
@property (nonatomic, retain) NSNumber *latitude;
@property (nonatomic, retain) NSNumber *longitude;
@property (nonatomic, retain) UIImage *image;


@end

这是 .m:

#import "ArtPiece.h"
#import "FindArtController.h"
#import "ArtPiece.h"
#import <MapKit/MapKit.h>

@implementation ArtPiece

- (NSString *)description{
return [NSString stringWithFormat:@"title: %@",title];
}

@synthesize title, artist, series, description, latitude, longitude, location, area, image;

- (CLLocationCoordinate2D)coordinate
{
CLLocationCoordinate2D theCoordinate;
theCoordinate.latitude = [self.latitude doubleValue];
theCoordinate.longitude = [self.longitude doubleValue];
return theCoordinate;
}




@end

然后我继续创建该类的对象,设置它们的值,并将它们添加到 AppDelegate 中的数组中。然后,在另一个类中,我使用:

[self.mapView addAnnotations:mainDelegate.mapAnnotations];

将注释添加到 map 。但是,当我尝试在 viewforannotation 方法中设置“艺术家”属性时,我得到“请求成员艺术家不是结构或联合”。

显然,我做这个子类化的事情一定是错的,但我要改变什么?

这是我现在拥有的 viewforannotation 方法。 test.artist... 行不工作。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{
MKAnnotationView *test=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"reuse"];
test.image = [UIImage imageNamed:@"pao_pin.png"];
[test setCanShowCallout:YES];
[test setUserInteractionEnabled:YES];
test.rightCalloutAccessoryView =
[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
test.artist = annotation.artist;
return test;
}

那么,我应该:annotation = (ArtPiece *)annotation简而言之,我的目标是能够存储对该注释中对象的数组位置的引用,以便我可以将其发送给可以访问该对象以获取详细 View 等的其他方法。

最佳答案

viewForAnnotation方法,您可以访问您的 ArtPiece属性,但要避免编译器错误和警告,您需要先转换 annotation自定义类的参数。 annotation该方法中的参数只是定义为 id<MKAnnotation>所以编译器不会知道 ArtPiece 特定的属性(直到你告诉它这是 ArtPiece 的一个实例)。

你需要这样的东西:

ArtPiece *artPiece = (ArtPiece *)annotation;
NSString *artist = artPiece.artist;

编辑:
当按下注释 View 的标注按钮时, map View 调用 calloutAccessoryControlTapped委托(delegate)方法。此方法通过了 MKAnnotationViewview范围。注释对象本身在 annotationview 的属性(property)范围。您可以将该对象转换为您的自定义类以访问您的 ArtPiece属性:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
ArtPiece *artPiece = (ArtPiece *)view.annotation;
NSString *artist = artPiece.artist;
}

换句话说,标注按钮处理程序不需要访问原始数组。它获得对实际 ArtPiece 的引用对象本身。

关于objective-c - 将数据存储在 MKAnnotation 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939223/

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