2016-10-12 10 views
0

У меня есть NSMutableDictionary с конкретными key и value. Этот словарь находится внутри NSMutableArray. Я хочу обновить словарь специальным ключом, который имеет определенный индекс внутри массива. Я хочу найти индекс этого словарного объекта. В настоящее время мой словарь находится в индексе 0, а мой editingIndexPath - это 1, который имеет тип NSIndexPath, поэтому editingIndexPath.row мне не помогает.Поиск индекса NSMutableDictionary внутри NSMutableArray

Мой код выглядит следующим образом:

//UpdatedDateAndTime is the NSMutableArray. 
    //selectedDay is a NSString object. 
    //dateKeySelected is also a string key. 

    [[updatedDateAndTime objectAtIndex:editingIndexPath.row] setObject:selectedDay forKey:dateKeySelected]; 

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

+0

В чем проблема с вышеуказанным кодом? Он устанавливает ключ? Не является ли индекс словаря таким же, как editIndexPath.row? –

+0

@TejaNandamuri ... Нет! Что делать, если словарь уже был в массиве. Для меня это было в 'index' со значением' 0', тогда как в tableview моя ячейка, соответствующая этому словарю, является 'editIndexPath.row', которая равна' 1'. Я хочу, чтобы индекс массива соответствовал словарю. – Ron

+0

Откуда вы знаете, что это индекс в индексе 1? Как вы сравниваете словари? – Larme

ответ

1

Ответ раньше был цикл со счетчиком, но вам повезло: NSArray имеет новый метод, indexOfObject:, который должен сделать трюк только штрафом:

NSUInteger i = [myArray indexOfObject:@{myKey:myValue}]; 

Swift: index(of:)

+0

Я получаю значение индекса так долго. '9223372036854775807' – Ron

+0

Спасибо! Я смог получить нужный индекс. Почему я получаю этот индекс, потому что я не передавал правильный словарь. – Ron

0

Если ваш массив содержит только один специальный NSMutableDictionary, используйте нижеприведенный код. Я не тестировал его, но идея заключается в поиске класса NSMutableDictionary в массиве. И вы должны сделать этот поиск в indexPath, который равен ячейке, которую вы хотите назначить некоторым данным.

@interface ViewController(){ 
    NSMutableArray *array; 
    NSMutableDictionary *dictionary; 
} 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

} 

- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if (indexPath.row == 1) { 
     for (int i = 0; i < array.count; i++) { 
      if ([updatedDateAndTime[i] objectForKey:@"open_house_updated_date"] == selectedDay) { 
      NSLog(@"%i th index contains NSMutableDictionary that you want",i); 
      //do whatever needed 
      break; 
     } 
     } 
    } 
    else{ 
     //define other cells which doesn't contain NSMutableDictionary 
    } 
    return cell; 
} 

@end 

Надеюсь, это то, что вы ищете.

+0

Большое спасибо за продление поддержки. Однако массив состоит из множества объектов NSMutableDictionary. Следовательно, это не так. – Ron

+0

, поэтому должны быть критерии для проверки правильного словаря и что это такое? – icould

+0

'NSString * dateKeySelected = @" open_house_updated_date ";' 'NSPredicate * predicateString = [NSPredicate predicateWithFormat: @"% K! = NULL ", dateKeySelected]; // Словари, имеющие key' 'NSArray * filteredArray = [updatedDateAndTime filteredArrayUsingPredicate: predicateString];' ' NSMutableDictionary * updatedDay = [[NSMutableDictionary Alloc] инициализации],' ' [updatedDay SetObject: selectedDay forKey: @ "open_house_updated_date" ]; ' – Ron