0

いくつかの興味のあるポイントでいくつかのデータを解析し、MapKit フレームワークを使用してそれらを地図上に表示しようとしています。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

MyLocation.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];
} 

後で、いくつかのコードを使用して注釈に画像を付けると、すべてがマップに表示されますが、注釈をクリックすると、タイトルとサブタイトルのあるウィンドウが表示されません。注釈のみが表示されますが、それらをクリックしたときに取得する必要がある追加情報は表示されません。

このコード行に何か問題があると思います:

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;    
}
4

3 に答える 3

1

titleこれらのプロパティを明示的に設定する代わりに、 andのカスタム getter メソッドを使用することsubtitleは、マップ ビューで問題ありません。

コールアウトが表示されない理由は、title(これは返さ_nameれます -- これは に設定されevent.typeEventます) がnilまたは空の文字列を返すためです。

_nameあなたのゲッターメソッドはタイプであるかどうかをチェックしていますが、それはまだまたは空の文字列NSNullである可能性があります。NSStringnil

titleがまたは空の文字列の場合nil、注釈はコールアウトを表示しません (canShowCalloutが に設定されていて、が空でない値を返しているYES場合でも)。subtitle

typeEventしたがって、それはnilまたは空の文字列である可能性が最も高いです。

于 2012-07-03T14:36:07.683 に答える
0

Appleのドキュメントを参照してください。注釈オブジェクトのタイトルとサブタイトルを自分で設定する必要があります。代わりに_addressのような他のプロパティではありません。そのドキュメントには2つのサンプルプロジェクトもあります。それらもチェックしてください。

于 2012-07-03T13:53:39.127 に答える
0

コードを見ると、titleまたはsubtitle属性を実際に設定することはありません。タイトルを設定した場所で、次のようにします。

eventAnnotation.title = event.typeEvent;
eventAnnotation.subtitle = event.titleEvent;

titleおよびsubtitleプロパティがファイルに設定されていることを確認し.hます。

編集:私の注釈のヘッダーは次のとおりです。

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

@interface MapmarkAnnotation : NSObject
<MKAnnotation>
{
    NSString *title;
    CLLocationCoordinate2D coordinate;
}

@property (nonatomic, copy) NSString *title;
@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;

@end
于 2012-07-03T13:16:05.357 に答える