所以我对XCODE和Objtovi.C非常新,我有几个具有不同属性存储在数组中的艺术作品对象。然后我将它们添加到MMAVIEW的MCANVIEW中。我需要做的是发送一个指向数组位置的引用。我相信MKANNECT只具有数据成员的标题、图像和位置,所以当我从对象中做一个MKANNATEN时,注释不保留任何其他属性。所以,我的问题是,如何管理一个对象的数组位置的引用,这样我就可以把它发送给其他方法,这样他们就可以从数组中获取关于对象的详细信息。我想没有其他想法了吧?
这是我的艺术品。

#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];

将注释添加到映射中。然而,当我试图在“方法”中设置“艺术家”属性时,我得到了“成员艺术家在某种结构或联盟中的请求”。
显然,我一定是做错了这个子类化的事情,但是我该做些什么呢?
这是我现在的检视法。测试。艺术家…线路不通。
- (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
简而言之,我的目标是能够存储一个对这个注释中对象的数组位置的引用,这样我就可以把它发送给其他可以访问该对象的方法来获取详细视图等。

最佳答案

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

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

编辑:
当按下注释视图的标注按钮时,Mmap视图调用calloutAccessoryControlTapped委托方法。该方法在MKAnnotationView参数中通过view。注释对象本身在annotation参数的view属性中。您可以将该对象强制转换为自定义类以访问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/

10-10 08:05