1

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
//listOfItems is a Pre Populated Array for the table 
    NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];  
//the array i want my selected items to be added to 
    NSArray *array = names; 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 



    if (cell.accessoryType == UITableViewCellAccessoryNone) { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 

    [names addObject:cellValue]; 

     NSLog(@"ARRAY: %@", array); 

    } 
    else { 
     cell.accessoryType = UITableViewCellAccessoryNone; 

      [names removeObjectAtIndex:indexPath.row];   

     NSLog(@"ARRAY: %@", array); 
    } 

    [tableView deselectRowAtIndexPath:indexPath animated:NO]; 


    } 
} 

Как найти номер индекса в массиве, который создается, чтобы он мог удалить правильное значение? Любая помощь будет оценена :-) Спасибо!

----- РЕШЕНИЕ ----- Вот альтернативный вариант, на случай, если другие задаются вопросом.

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *selected = [listOfItems objectAtIndex:indexPath.row]; 

    if (cell.accessoryType == UITableViewCellAccessoryNone) { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 

       [names addObject:selected]; 
      NSLog(@"ARRAY ADDED %@", names); 
     } 


    else { 

     cell.accessoryType = UITableViewCellAccessoryNone;    

     [names removeObject:selected]; 

     NSLog(@"ARRAY DELETED %@", names); 

    } 

ответ

1

Если ваше намерение передать массив проверяемых значений ячеек с точки зрения, почему добавление и удаление объектов при каждом выборе ячейки? Вы можете легко достичь этого, прежде чем собираться представить новый контроллер представления. Что-то вроде этого:

// In whatever method you have to present the new view controller 
// ... 
NSMutableArray *names = [[NSMutableArray alloc] initWithCapacity:0]; 

for (int i = 0; i < listOfItems.count; i++) 
{ 
    if ([self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]].accessoryType == UITableViewCellAccessoryCheckmark) //Change section number if not 0 
    { 
     [names addObject:[listOfItems objectAtIndex:i]]; 
    } 
} 

// Pass the array now to the destination controller 

Ps. Вы все еще должны управлять проверкой/снятием флажков с ячеек (как вы уже делаете в коде выше).

+0

Мне нужен массив для добавления значений в оператор sql. – Far

+0

@Far: хорошо ... и что, похоже, проблема с использованием массива 'names' из моего примера? – Alladinian

+0

, который исправил мою проблему, спасибо. – Far