2012-02-27 4 views
0

У меня есть цикл, который создает ключ (на основе алфавита) и значение пустого массива.Невозможно добавить значения в NSMutableDictionary

-(id)init 
{ 
    if (self = [super init]){ 
     addressbook=[[NSMutableDictionary alloc] init]; 
     //loop over the alphabetArray and add to an adressbook dictionary 
     for(char a = 'a'; a <= 'z'; a++){ 
      NSMutableArray * personenArrayTemp = [[NSMutableArray alloc] init]; 
      [addressbook setValue:personenArrayTemp forKey:[NSString stringWithFormat:@"%c", a]]; 
     } 
    } 
    return self; 
} 

Далее я добавить человека в моей адресной книге, получив первую букву имени и с помощью, чтобы посмотреть ключ для этой буквы в адресной. После обнаружения я добавляю объект person.

-(void)addAddressbook:(Persoon *)persoon{ 
    NSString *firstLetter = [persoon.naam substringToIndex:1]; 
    [[addressbook objectForKey:firstLetter] addObject:persoon]; 
    //NSLog(@"%@",firstLetter); 
    for(NSString *key in addressbook){ 
     NSLog(@"key=%@ , value=%@ ", key,[addressbook objectForKey:key]); 
    } 
} 

NSLog в цикл только возвращает это:

2012-02-27 16:26:20.152 Adresboek[4828:503] key=p , value=(
) 
2012-02-27 16:26:20.155 Adresboek[4828:503] key=c , value=(
) 
2012-02-27 16:26:20.190 Adresboek[4828:503] key=b , value=(
) 
. 
. 
. 
2012-02-27 16:26:20.223 Adresboek[4828:503] key=o , value=(
) 

Все значения являются пустыми.

РЕШИТЬ, он вернулся заглавную букву

+0

Попробуйте 'для (NSString * key in [адресная книга allKeys]) {' –

+0

Я получаю тот же результат – Stofke

+0

Еще одна странная вещь: вы добавляете тот же экземпляр массива для каждой буквы (так что все буквы имеют один и тот же массив). Я ожидаю увидеть, что тот же самый человек повторяется под всеми письмами. Является ли словарь перезагружен где-то? – Dirk

ответ

1

Прежде всего, вы добавляете один и тот же NSMutable экземпляр массива, чтобы все ключи в вашем NSDictionary. Поэтому независимо от того, что вы добавляете (или не добавляете), результаты для каждого ключа в вашем выходе всегда будут одинаковыми. Если это не то, что вы планируете, то вам необходимо переместить создание временного массива внутри цикла:

//loop over the alphabetArray and add to an adressbook dictionary 
for(char a = 'a'; a <= 'z'; a++){ 
    NSMutableArray * personenArrayTemp = [[NSMutableArray alloc] init]; 
    [addressbook setValue:personenArrayTemp forKey:[NSString stringWithFormat:@"%c", a]]; 
} 

Теперь возникает вопрос, почему ничего не становится добавили. Я подозреваю, что если вы посмотрите на значение [addressbook objectForKey:firstLetter], то это, вероятно, nil, поэтому, когда вы добавляете к нему свой объект, ничего не происходит. Трудно точно сказать, почему это произойдет: вам нужно будет посмотреть, что передается в вашу функцию как persoon.naam и что возвращается в вашу переменную firstLetter. Является ли firstLetter действительно той же строкой, что и вы, как индексы в словаре?

Смежные вопросы