добавление записей в NSMutableDictionary - PullRequest
2 голосов
/ 18 августа 2011

У меня проблемы с добавлением словаря в nsmutabledictionary. Кто-нибудь может увидеть, что я делаю не так?

@interface viewMap : UIViewController<MKMapViewDelegate> {

     NSMutableDictionary *onclickDic;

}

@property (nonatomic, retain) NSMutableDictionary *onclickDic;
@end

@implementation viewMap
@synthesize onclickDic;

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

    NSString *pushLat   = [NSString stringWithFormat:@"%f", [annotation coordinate].latitude];
    NSString *pushLng   = [NSString stringWithFormat:@"%f", [annotation coordinate].longitude];

    NSDictionary *latlngDic = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:pushLat, pushLng, nil] forKeys:[NSArray arrayWithObjects:@"lat", @"lng", nil]];

    NSDictionary *toPush    = [NSDictionary dictionaryWithObject:latlngDic forKey:[NSString stringWithFormat:@"%i", i]];


    NSLog(@"toPush is %@", toPush); // this one is correct and works

    [self.onclickDic addEntriesFromDictionary:toPush];

    NSLog(@"onclickDic is %@", onclickDic); // this one gives (null)
}
@end

Ответы [ 3 ]

3 голосов
/ 18 августа 2011

Похоже, вы никогда не создаете onclickDic.Вы также никогда не выпускаете его.

Попробуйте добавить эти методы:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
{
    self = [super initWithNibName:nibName bundle:nibBundle];
    if (self)
    {
        onclickDict = [[NSMutableDictionary alloc] init];
    }
    return self;
}

- (void)dealloc
{
    [onclickDict release];

    [super dealloc];
}
2 голосов
/ 18 августа 2011

Вы, кажется, не создаете экземпляр self.onclickDic нигде.Даже с @synthesize это не сделано для вас.Лучшее место для этого, вероятно, init.

. Причина, по которой вызов не прерывается, состоит в том, что в Objective C нормально вызывать функцию для объекта nil.Это обычно используется при вызове методов делегатов, например.

2 голосов
/ 18 августа 2011

Не похоже, что onclickDic назначен.Убедитесь, что вы выделяете экземпляр до вызова метода mapView:viewForAnnotation:.

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

[onclickDic setValue:latlngDic forKey:[NSString stringWithFormat:@"%i", i]];
...