0

カスタム アノテーション タイトル値を設定しようとしていますが、クラッシュ レポートが表示されます。クラッシュ レポートは次のとおりです。

「キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[CustomAnnotation setTitle:]: 認識されないセレクターがインスタンスに送信されました」

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    MKMapRect mapRect = mapView.visibleMapRect;
    MKMapPoint eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mapRect), MKMapRectGetMidY(mapRect));
    MKMapPoint westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mapRect), MKMapRectGetMidY(mapRect));

    CGFloat meters = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint);

    if (meters > 15000)
        return;

    // if we have some backlogged requests, let's just get rid of them

    [self.searchQueue cancelAllOperations];

    // issue new MKLoadSearch

    [self.searchQueue addOperationWithBlock:^{

        __block BOOL done = NO;

        MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
        request.naturalLanguageQuery = @"theater";
        request.region = mapView.region;

        MKLocalSearch *localSearch = [[MKLocalSearch alloc] initWithRequest:request];
        [localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {

            NSMutableArray *annotations = [NSMutableArray array];



            [response.mapItems enumerateObjectsUsingBlock:^(MKMapItem *item, NSUInteger idx, BOOL *stop) {

                for (CustomAnnotation *annotation in mapView.annotations)
                {
                    // if we don't need this one, don't add it, just return, and we'll check the next one

                    annotation.title;

                    NSLog(@"%@",annotation.title);

                    if ([annotation isKindOfClass:[CustomAnnotation class]])
                        if (item.placemark.coordinate.latitude == annotation.coordinate.latitude &&
                            item.placemark.coordinate.longitude == annotation.coordinate.longitude)
                        {
                            return;
                        }
                }


                NSLog(@"%f",item.placemark.coordinate.latitude);

                NSLog(@"%f",item.placemark.coordinate.longitude);
                // otherwise add it


                CustomAnnotation *annotation = [[CustomAnnotation alloc] initWithPlacemark:item.placemark];

                CLLocation *locA = [[CLLocation alloc] initWithLatitude:37.33554 longitude:-121.885209];

                CLLocation *locB = [[CLLocation alloc] initWithLatitude:item.placemark.coordinate.latitude longitude:item.placemark.coordinate.longitude];

                CLLocationDistance distance = [locA distanceFromLocation:locB];
                NSLog(@"%f",distance);

                annotation.title=item.title;     --> i get crash report in this line
                NSLog(@"%@",annotation.title);
                annotation.phone = item.phoneNumber;
                annotation.subtitlee = item.placemark.addressDictionary[(NSString *)kABPersonAddressStreetKey];
                [annotations addObject:annotation];

                NSLog(@"%@",annotations);

                //[self.mapView addAnnotations:annotation.name];
            }];




            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                //CustomAnnotation

                [self.mapView addAnnotations:annotations];
            }];

            done = YES;
        }];

        while (!done)
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                                     beforeDate:[NSDate distantFuture]];
    }];


}

//////////////////////////////////

ありがとうございました...

enter code here



#import <MapKit/MapKit.h>

@interface CustomAnnotation : MKPlacemark
{
    CLLocationCoordinate2D coordinate;
}

@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *subtitlee;
@property (strong, nonatomic) NSString *phone;
@property (nonatomic) NSUInteger index;
enter code here

@終わり

4

2 に答える 2

0

私はそれを考え出した。CustomAnnotationのサブクラスであり、プロトコルMKPlacemarkに準拠しています。プロトコルにはプロパティがありMKAnnotationます。MKAnnotationtitle

したがって、実際には MKAnnotation プロトコルからこのプロパティを継承していますが、これは望んでいるものではありません。titleプロパティの名前を egに変更するだけcustomAnnotationTitleで問題ありません。

于 2015-10-16T11:38:44.290 に答える