Невозможно добавить значения в NSMutableDictionary - PullRequest
0 голосов
/ 27 февраля 2012

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

-(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 в цикле for просто возвращает это:

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=(
) 

Все значения пусты.

решено, возвращена заглавная буква

1 Ответ

1 голос
/ 27 февраля 2012

Прежде всего, вы добавляете один и тот же экземпляр массива 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 действительно той же строкой, что и та, которую вы используете в качестве индексов в своем словаре?

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