NSMutableDictionary не имеет значений, установленных без видимой причины - PullRequest
0 голосов
/ 08 февраля 2012

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

//in .h file: NSMutableDictionary* expandedSections;
//in Init method: expandedSections = [[NSMutableDictionary alloc] init];

- (void) tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
    NSString* key = [NSString stringWithFormat:@"%d", indexPath.row];
    NSLog(@"Key: %@", key);
    if ([expandedSections objectForKey:key] == nil)
    {
        NSLog(@"Value Should be: %@", [NSNumber numberWithBool:YES]);
        [expandedSections setObject:[NSNumber numberWithBool:YES] forKey:key];
    }
    else
    {
        [expandedSections setObject:[NSNumber numberWithBool:![[expandedSections objectForKey:key] boolValue]] forKey:key];
    }
    NSLog(@"Value: %@", [expandedSections objectForKey:key]);
    [tableView beginUpdates];
    [tableView endUpdates];
}

- (float) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* key = [NSString stringWithFormat:@"%d", indexPath.row];
    NSLog(@"Key: %@", key);
    NSLog(@"Value: %@", [expandedSections objectForKey:key]);
    if ([expandedSections objectForKey:key] == nil || ![[expandedSections objectForKey:key] boolValue])
    {
        return 44;
    }
    else
    {
        return 88;
    }
}

Я ожидаю, что это выведет в журнал чередующиеся значения 1 и 0, когда я коснусь строки в моем UITableView. И соответственно разверните и сверните строку, которую я нажимаю.

По какой-то причине NSDictionary никогда не содержит каких-либо пар ключ / значение, поэтому строки никогда не расширяются. Ведение журнала из метода heightForRow выглядит так:

2012-02-08 11:36:30.291 MappApp[5040:707] Key: 0
2012-02-08 11:36:30.293 MappApp[5040:707] Value: (null)

Ведение журнала из метода didSlectRowAt имеет вид:

2012-02-08 11:36:44.551 MappApp[5040:707] Key: 0
2012-02-08 11:36:46.530 MappApp[5040:707] Value Should be: 1
2012-02-08 11:36:50.723 MappApp[5040:707] Value: (null)

Что я делаю не так?

1 Ответ

0 голосов
/ 08 февраля 2012

Выходные данные логирования имеют смысл, если expandedSections равно nil, т.е. вы никогда не создавали его или не сбрасывали по какой-либо причине.

Вы должны начать с проверки кода инициализации для вашего класса.

...