Массив словарей - PullRequest
       5

Массив словарей

0 голосов
/ 11 августа 2011

У меня есть NSMutableArray, purDesc, который содержит NSMutableDictionary, purDetails.Когда я использую NSLog(@"%@", purDesc);, он возвращает пустые места, где должны быть словари, как указано ниже:

singleton purDesc Dump:(
        {
    },
        {
    },
        {
    },
        {
    },
        {
    }
)

Теперь размер / внешний вид / дамп меняется каждый раз, когда я добавляю словарь, чтобы отразить количество раз, которое словарь получаетдобавлено / удалено.Вот фрагменты кода, взятые из моего парсера XML:

...

else if ([elementName isEqualToString:@"purDesc"])
{
    //close purDisc
    // dumps dictionary into log
    NSLog(@"End of purDesc");
    NSLog(@"Dump:%@", [purDesc description]);

    [singleton setPurDesc:purDesc];//sets this response to the response in the singleton

    NSLog(@"singleton purDesc Dump:%@", [[singleton purDesc] description]);
    return;//we're done here
}
else if ([elementName isEqualToString:@"PurDetails"])
{
    //close purDetails
    // dumps dictionary into log
    NSLog(@"End of PurDetails");
    [purDetails addEntriesFromDictionary:description];//sets current purDetails to current description
    NSLog(@"Dump:%@", [purDetails description]);

    [purDesc addObject:purDetails];//adds purDetails dictionary to purDesc
    [purDetails removeAllObjects];
    NSLog(@"Current purDesc:%@", [purDesc description]); 
}

Что я делаю не так и почему журнал появляется полупустым?

1 Ответ

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

Я вижу, что вы делаете:

[purDesc addObject:purDetails];//adds purDetails dictionary to purDesc
[purDetails removeAllObjects];

Это хранит ссылку до purDetails в purDesc и увеличивает его счетчик хранения, но он не делает копию .Так что если вы removeAllObjects , содержимое словаря будет потеряно.Тот факт, что вы «сохранили» ссылку на него в purDesc , не меняет этого.Я думаю, то, что вы видите, является результатом этого или подобного действия.

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

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

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