Как изменить ключи в нескольких NSMutableDictionaries на -1 от его текущего значения? - PullRequest
0 голосов
/ 26 октября 2011

У меня есть UITableView, источником данных которого является NSMutableArray. Массив содержит NSMutableDictionaries с ключами «имя», «индекс», «цвет» и «строка». Ключ индекса представляет строку в табличном представлении, в котором находится объект. Перемещение и добавление объектов прекрасно работает с этим и сохраняет их правильными и обновленными, но когда я пытаюсь удалить объект, ключ индекса для объектов после удаленного ряд 1 выключен. Я перепробовал много вещей, но каждая попытка не удалась. Может кто-нибудь подсказать мне? Вот код для массива:

contentarray = [[NSArray arrayWithObjects:
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
        @"Object 1", @"name",
        @"0", @"index",
        @"0", @"color",
        @"Example", @"string",
        nil],
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
        @"Object 2", @"name",
        @"1", @"index",
        @"1", @"color",
        @"String 2", @"string",
        nil],
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
        @"Object 3", @"name",
        @"2", @"index",
        @"0", @"color",
        @"String 3", @"string",
        nil],
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
        @"Object 4", @"name",
        @"3", @"index",
        @"2", @"color",
        @"String 4", @"string",
        nil],
    [NSMutableDictionary dictionaryWithObjectsAndKeys:
        @"Object 5", @"name",
        @"4", @"index",
        @"0", @"color",
        @"String 5", @"string",
        nil],
    nil] mutableCopy];

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Рассматривая эту проблему скорее как упражнение (вы не будете хранить индекс в элементе массива обычно, в этом нет необходимости), я предоставлю решение проблемы ...

Во-первых, вы должнывероятно, вы используете объекты NSNumber для представления чисел в NSDictionary, так что ваш массив полон словарей, как, например,

[NSMutableDictionary dictionaryWithObjectsAndKeys:
    @"Object 1", @"name",
    [NSNumber numberWithInt:0], @"index",
    [NSNumber numberWithInt:0], @"color",
    @"Example", @"string",
    nil],

Более того, я бы посчитал использование словаря типом данных довольно плохой формой, выЛучше было бы создать класс для представления того, что вы храните здесь ... однако, для решения вашего вопроса ...

После того, как вы изменили массив, вам нужно выполнить итерациюмассив, обновляя индексы до их правильного значения по мере продвижения.Этой функции будет достаточно:

- (void)correctContentArrayIndices {
    int contentArrayIndex = 0;
    for(NSMutableDictionary *dict in contentarray) {
        NSString *stringRepresentationOfIndex = [NSString stringWithFormat:@"%i", 
                                                 contentArrayIndex];
        [dict setObject:stringRepresentationOfIndex forKey:@"index"];
        contentArrayIndex++;
    }
}
0 голосов
/ 26 октября 2011

Вам не нужно хранить указатель в словаре.NSArray, который содержит словарь, отслеживает индекс.Он доступен как indexPath.row в большинстве методов UITableViewDelegate.

0 голосов
/ 26 октября 2011

Вы обрабатываете tableView:

- (void) tableView: (UITableView *) aTableView commitEditingStyle: (UITableViewCellEditingStyle) editStyle forRowAtIndexPath: (NSIndexPath *) indexPath

обратный вызов от удаления и переупорядочения ваших индексов?

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