2

オブジェクトのリストがあり、それぞれにタイトル、名前、説明、緯度、経度、住所があります。このオブジェクトをMKAnnotationsとして表示することは可能ですか?私はこれで何時間も立ち往生しています。オブジェクトにCLLocationCoordinate2Dを設定しようとすると、緯度または経度が割り当てられないというエラーが発生し続けました。

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

@interface Oficina : NSObject <MKMapViewDelegate>

@property (nonatomic, readwrite) CLLocationCoordinate2D oficinaCoordinate;
@property (nonatomic, strong) NSString *oficinaCiudad;
@property (nonatomic, strong) NSString *oficinaEstado;
@property (nonatomic, strong) NSString *oficinaTitulo;
@property (nonatomic, strong) NSString *oficinaTelefono;
@property (nonatomic, strong) NSString *oficinaLatitud;
@property (nonatomic, strong) NSString *oficinaLongitud;
@property (nonatomic, strong) NSString *oficinaID;
@property (nonatomic, strong) NSString *oficinaDireccion;
@property (nonatomic, strong) NSString *oficinaHorario;
@property (nonatomic, strong) NSString *oficinaTipoDeOficina;
@property (nonatomic, strong) NSString *oficinaServicios;
@property (nonatomic, strong) NSString *oficinaTipoDeModulo;


@end

したがって、インターネットサービスを利用した後、これらのオブジェクトを約70個取得します。次に、それらのそれぞれをマップ注釈に変換できるようにしたいと思います。これは、緯度を割り当てようとした方法の1つですが、「式を割り当てられません」というエラーが表示されます。

currentOffice.oficinaCoordinate.latitude = [parseCharacters floatValue];

currentOfficeは私のカスタムオブジェクトのインスタンスです。

4

4 に答える 4

2

タイトル、名前、説明、緯度、経度、住所を MKAnnotations として表示することができます。

座標プロパティを「割り当て」に変更しようとしましたか?

@interface MyAnnotation : NSObject<MKAnnotation> 
{   
 CLLocationCoordinate2D coordinate;
 NSString *title;
 NSString *name;
 NSString *description;
}
@property (nonatomic, assign) CLLocationCoordinate2D    coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *description;
于 2012-11-13T04:43:33.333 に答える
1

これは、私がこの問題に取り組むようになった方法のサンプルコードです。最初に mapView 注釈配列をロードします。

        CLLocationCoordinate2D location;
        Annotation *myAnn;

        if (!self.locationsMutableArray) self.locationsMutableArray = [NSMutableArray array];

        NSMutableArray *tmpMutableArray = [NSMutableArray array];
        for (NSDictionary *subArr in arr)
        {
                    myAnn = [[Annotation alloc] init];
                    myAnn.address = [NSString stringWithFormat:@"%@, %@, %@, %@",
                                     [subArr objectForKey:@"address"],
                                     [subArr objectForKey:@"city"],
                                     [subArr objectForKey:@"state"],
                                     [subArr objectForKey:@"zip"]];
                    location.latitude = [[subArr objectForKey:@"lat"] doubleValue];
                    location.longitude = [[subArr objectForKey:@"lon"] doubleValue];
                    myAnn.coordinate = location;
                    myAnn.title = [subArr objectForKey:@"name"];
                    myAnn.subtitle = [subArr objectForKey:@"siteSpecialtyCategory"];
                    myAnn.siteType = [subArr objectForKey:@"siteType"];
                    myAnn.phoneNumber = [subArr objectForKey:@"phoneNumber"];
                    [tmpMutableArray addObject:myAnn];
         }
        [self.locationsMutableArray addObject:tmpMutableArray];

        [self.mapView addAnnotations:array];

本当に必要なのは、MKAnnotationView私のカスタムサブクラスを作成する必要があるということだけですAnnotation。また、<MKAnnotation>プロトコルに準拠する必要があり、それらをカスタム アノテーションとしてマップ ビューに追加できます。

ヘッダーOficinaファイルを次のように開始します。

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

@interface Oficina : MKAnnotationView <MKAnnotation>

@property (nonatomic, readwrite) CLLocationCoordinate2D oficinaCoordinate;
@property (nonatomic, strong) NSString *oficinaCiudad;
@property (nonatomic, strong) NSString *oficinaEstado;
@property (nonatomic, strong) NSString *oficinaTitulo;
@property (nonatomic, strong) NSString *oficinaTelefono;
@property (nonatomic, strong) NSString *oficinaLatitud;
@property (nonatomic, strong) NSString *oficinaLongitud;
@property (nonatomic, strong) NSString *oficinaID;
@property (nonatomic, strong) NSString *oficinaDireccion;
@property (nonatomic, strong) NSString *oficinaHorario;
@property (nonatomic, strong) NSString *oficinaTipoDeOficina;
@property (nonatomic, strong) NSString *oficinaServicios;
@property (nonatomic, strong) NSString *oficinaTipoDeModulo;


@end
于 2012-11-13T04:44:59.430 に答える
0

タップされたMKAnnotationのオブジェクトの詳細を取得する方法は、次を追加することでした。

id<MKAnnotation> selectedOffice = view.annotation;

デリゲートメソッドへ

-(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { }

私の特定のケースでは、MKAnnotationはOficinaと呼ばれるカスタムオブジェクトだったので、次のように新しいViewControllerに渡しました。

showOfficeDetail = (Oficina *)selectedOffice;
于 2012-11-14T23:42:54.333 に答える