Странный сброс NSMutableDictionary - PullRequest
0 голосов
/ 18 июля 2011

У меня есть следующие функции:

- (NSMutableDictionary *) getUserDataDictionary
{
    [userDataDicionary removeAllObjects];
    userDataDicionary = [[NSMutableDictionary alloc] initWithContentsOfFile:[self getUserDataDictionaryPath]];

    return userDataDicionary;   
}

- (int) getIndexOfLastVehicle
{
MyAppDelegate *app = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
NSMutableDictionary *tmpUserData = [app getUserDataDictionary];

int lastHighestIndex = -1;

for(id item in [tmpUserData allKeys]){
    NSString *keyInArray = (NSString *)item;

    if ([keyInArray rangeOfString:@"VEHICLE-"].location != NSNotFound) {
        //f.e. "VEHICLE", "1", "TYPE"...or "VEHICLE", "1", "SPZ"...or "VEHICLE", "2", "TYPE" etc
        NSArray * separatedComponents = [keyInArray componentsSeparatedByString:@"-"];
        int indexOfVehicle = [(NSString *)[separatedComponents objectAtIndex:1] intValue];

        if(indexOfVehicle > lastHighestIndex){
            lastHighestIndex = indexOfVehicle;
        }
    }
}

return lastHighestIndex;
}

Проблема:
после этого кода:

MyAppDelegate *app = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSMutableDictionary *tmpUserData = [app getUserDataDictionary];

int lastVehicleIndex = [self getIndexOfLastVehicle];

tmpUserData имеет значение EMPTY.

Но когдаЯ изменил порядок следующим образом:

int lastVehicleIndex = [self getIndexOfLastVehicle];

MyAppDelegate *app = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
NSMutableDictionary *tmpUserData = [app getUserDataDictionary];

tmpUserData правильно заполнен.

Может кто-нибудь объяснить это поведение?Спасибо

Ответы [ 3 ]

0 голосов
/ 18 июля 2011

У вас проблема с этим методом:

- (NSMutableDictionary *) getUserDataDictionary
{
    [userDataDicionary release]; 
    userDataDicionary = [[NSMutableDictionary alloc] initWithContentsOfFile:[self getUserDataDictionaryPath]];

    return userDataDicionary;   
}
0 голосов
/ 18 июля 2011

Одна из проблем заключается в методе getUserDataDictionary. Вы звоните removeAllObjects, который не освобождает userDataDictionary. Вы должны выпустить его вместо удаления AllObject. Фактическая версия выпустит все свои объекты для вас.

0 голосов
/ 18 июля 2011

Я далеко не профессионал в Objective C, но у меня была похожая проблема с az NSMutableArray.Проблема в моем случае заключалась в том, что что-то было выпущено или инициировано еще раз, чем требовалось.

Я предлагаю разместить несколько NSLog () - здесь и там, чтобы узнать, где теряется ваш контент.Я сделал это, я в основном поместил NSLog в каждую инструкцию, связанную с моим объектом, и, наконец, я смог исправить все.

Просто идея, возможно, это помогает.

...