Обновить ключ в словаре - PullRequest
       7

Обновить ключ в словаре

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

У меня есть несколько NSDictionaries внутри NSArray.Я хочу изменить BOOL внутри одного из словарей, чтобы это изменение было внесено во весь массив (он загружает таблицу).

У меня есть этот код, но он не меняет BOOL.Я чувствую, что мне нужно удалить mutableCopy, чтобы работать, но потом он падает ...

    NSLog(@"before: %@", self.currentScopeArray);
    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [[self.currentScopeArray objectAtIndex:iIndexPath.row] setObject:[NSNumber numberWithBool:YES] forKey:@"enabledByDefault"];
    } else {    
        if (!(self.currentScopeArray.count < 2)) {
            cell.accessoryType = UITableViewCellAccessoryNone;
            [[[self.currentScopeArray objectAtIndex:iIndexPath.row]mutableCopy] setObject:[NSNumber numberWithBool:NO] forKey:@"enabledByDefault"];
        }
    }
    NSLog(@"after: %@", self.currentScopeArray);

Ответы [ 2 ]

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

Вы добавляете связку NSDictionary в NSArray.Я бы посоветовал вам

  • Превратить NSArray в NSMutableArray
  • Сделать NSDictionary в NSMutableDictionary

Почему?потому что вам уже нужно изменить значения в словаре.И есть вероятность, что вы также можете добавить / удалить словари из массива.После того, как вы сделали их изменяемыми, вы можете сделать это:

   [[self.currentScopeArray objectAtIndex:iIndexPath.row] setObject:[NSNumber numberWithBool:YES] forKey:@"enabledByDefault"];

и

[[self.currentScopeArray objectAtIndex:iIndexPath.row] setObject:[NSNumber numberWithBool:NO] forKey:@"enabledByDefault"];

Другая проблема, связанная с вашей текущей реализацией, заключается в том, что вы работаете с изменяемым скопируйте и , а не в исходном словаре.Копия изменена, оригинал - нет.

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

Если вы создаете изменяемую копию объекта, то это будет именно эта копия.Если вы хотите изменить объект, который уже находится внутри currentScopeArray, то вам либо нужно иметь изменяемые объекты в массиве, либо вам нужно получить изменяемую копию, изменить ее, а затем заменить исходный объект.

Я бы посоветовал бывшему быть честным.Таким образом, вы должны создать currentScopeArray, добавив к нему NSMutableDictionary s, а затем просто замените эту строку:

[[[self.currentScopeArray objectAtIndex:iIndexPath.row]mutableCopy] setObject:[NSNumber numberWithBool:NO] forKey:@"enabledByDefault"];

на эту:

[[self.currentScopeArray objectAtIndex:iIndexPath.row] setObject:[NSNumber numberWithBool:NO] forKey:@"enabledByDefault"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...