NSMutableDictionary, alloc, init и reiniting - PullRequest
1 голос
/ 17 марта 2010

В следующем коде:

//anArray is a Array of Dictionary with 5 objs. 

//here we init with the first
NSMutableDictionary *anMutableDict = [[NSMutableDictionary alloc] initWithDictionary:[anArray objectAtIndex:0]];

... use of anMutableDict ...
//then want to clear the MutableDict and assign the other dicts that was in the array of dicts

for (int i=1;i<5;i++) {
    [anMutableDict removeAllObjects];
    [anMutableDict initWithDictionary:[anArray objectAtIndex:i]];
} 

Почему это крушение? Как правильно очистить nsmutabledict и назначить новый dict?

Спасибо, парень.

Маркос.

Ответы [ 3 ]

3 голосов
/ 17 марта 2010

Вы не «переинициализируете» объекты - никогда. Инициализация предназначена для использования на вновь alloc ed экземпляре и может делать предположения, которые не соответствуют действительности после завершения инициализации. В случае NSMutableDictionary вы можете использовать setDictionary: для полной замены содержимого словаря новым словарем или addEntriesFromDictionary: для добавления записей из другого словаря (без удаления текущих записей, если нет конфликтов).

В общем, вы можете просто выпустить этот словарь и сделать mutableCopy из словаря в массиве.

2 голосов
/ 17 марта 2010

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

NSMutableDictionary *anMutableDict = [NSMutableDictionary dictionaryWithDictionary:[anArray objectAtIndex:0]];

... use of anMutableDict ...

for (int i=1; i<5; i++)
{
    anMutableDict = [NSMutableDictionary dictionaryWithDictionary:[anArray objectAtIndex:i]];
} 

Но я не вижу смысла в том цикле, который у вас там в конце.

1 голос
/ 17 марта 2010

Это не то, как вы используете init / alloc. Вместо этого попробуйте:

//anArray is a Array of Dictionary with 5 objs. 

//here we init with the first
NSMutableDictionary *anMutableDict = [[NSMutableDictionary alloc] initWithDictionary:[anArray objectAtIndex:0]];

... use of anMutableDict ...
//then want to clear the MutableDict and assign the other dicts that was in the array of dicts

for (int i=1;i<5;i++) {
    [anMutableDict removeAllObjects];
    [anMutableDict addEntriesFromDictionary:[anArray objectAtIndex:i]];
} 
...