Хранить данные в MKAnnotation?

Итак, я новичок в Xcode и Objective-C. У меня есть несколько объектов ArtPiece с различными атрибутами, хранящимися в массиве. Затем я добавляю их как MKAnnotations в представление карты. Что мне нужно сделать, так это отправить ссылку на позицию массива, из которой они пришли при нажатии. Я считаю, что MKAnnotations имеет только заголовок, изображение и местоположение членов данных, поэтому, когда я создаю MKAnnotation из объектов, аннотация не сохраняет никаких других атрибутов. Итак, мой вопрос: как мне сохранить ссылку на позицию в массиве объекта, из которого была создана аннотация, чтобы я мог отправить ее другим методам, чтобы они могли получить дополнительную информацию об объекте из массива для подробностей. просмотров и т. д. Есть ли способ сохранить в аннотации одно значение типа 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];

, чтобы добавить аннотации к карте. Однако, когда я пытаюсь установить атрибут «художник» в методе 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 и добавьте их в массив в AppDelegate. Затем в другом классе я использую:

[self.mapView addAnnotations:mainDelegate.mapAnnotations];

, чтобы добавить аннотации к карте. Однако, когда я пытаюсь установить атрибут «художник» в методе 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 и добавьте их в массив в AppDelegate. Затем в другом классе я использую:

[self.mapView addAnnotations:mainDelegate.mapAnnotations];

, чтобы добавить аннотации к карте. Однако, когда я пытаюсь установить атрибут «художник» в методе 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 Я, должно быть, неправильно делаю это подклассы, но что мне изменить?

Вот метод представления, который у меня есть сейчас. Строка 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 Я, должно быть, неправильно делаю это подклассы, но что мне изменить?

Вот метод представления, который у меня есть сейчас. Строка 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 Короче говоря, моя цель - сохранить ссылку на позицию в массиве объекта в этой аннотации, чтобы я мог отправить ее другим методам, которые могут получить доступ к этому объекту для просмотра деталей и т. Д.

15
задан Ryan 9 May 2011 в 18:48
поделиться