Сбои MapKit - нераспознанный селектор отправлен на экземпляр - PullRequest
1 голос
/ 17 июля 2011

Я пытаюсь добавить аннотации к пин / адресу в моем представлении карт Google. Когда я делаю это, все работает нормально:

[self addPin: CLLocationCoordinate2DMake(lat, lng) title: @"test" subtitle: @"test"];

с:

- (void) addPin: (CLLocationCoordinate2D) position title: (NSString *) pinTitle subtitle: (NSString *) pinSubtitle{

AddressAnnotation *addAnnotation = [[AddressAnnotation alloc] initWithTitle:pinTitle andCoordinate:position andSubtitle:pinSubtitle];

[mapView addAnnotation:addAnnotation];
[addAnnotation autorelease];

}

и

#import "AddressAnnotation.h"

@implementation AddressAnnotation

@synthesize title, coordinate, subtitle;

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d andSubtitle:(NSString *)sbtitle {
[super init];
title = ttl;
coordinate = c2d;
subtitle = sbtitle;
return self;
}

- (void)dealloc {
[title release];
[super dealloc];
}

@end

с:

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

@interface AddressAnnotation : NSObject <MKAnnotation> {

NSString *title;
CLLocationCoordinate2D coordinate;
NSString *subtitle;
}

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

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d andSubtitle:(NSString *)sbtitle;

@end

дела идут плохо, когда я делаю это:

NSString *detailTitle   = [NSString stringWithFormat:@"%@", [key objectForKey:@"name"]];
NSString *detailSubtitle    = [NSString stringWithFormat:@"%@", [key objectForKey:@"vicinity"]];

 NSLog(@"%@", detailSubtitle);
[self addPin: CLLocationCoordinate2DMake(lat, lng) title: detailTitle subtitle: detailSubtitle];

Приложение описывает несколько случаев, когда выводы должны идти на мой взгляд, и иногда выводит эту ошибку:

'NSInvalidArgumentException', причина: '- [Длина NSCFNumber]: нераспознанный селектор отправлен на экземпляр 0x5851c80'

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Попробуйте изменить init функцию с AddressAnnotation.m на

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d andSubtitle:(NSString *)sbtitle {
    self = [super init];
    if (self) {
        self.title = ttl;
        self.coordinate = c2d;
        self.subtitle = sbtitle;
    }
    return self;
}

. Вы используете переменные экземпляра напрямую, чтобы установить значения в экземпляре класса, а не свойства, поэтому действительные значения, которые вы передаетене копируются, следовательно, не сохраняются.

0 голосов
/ 17 июля 2011

NSCFNumber является одной из частных реализаций NSNumber.NSNumber не имеет метода с именем length, поэтому он не распознает селектор.Все идет нормально.

Трудно сказать, где используется этот NSNumber.ISTM, что проблема не в вашем коде.Я не знаю достаточно MapKit, чтобы дать вам обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...