1

I'm trying to create an array from selected table rows so I can push it to a new view. My issue is deleting an unselected row from the array it throws an error of index beyond bounds, although I have other items selected.

- (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];


     } 
}

How do I find the index number in the array that is being created so it can delete the proper value? Any help would be appreciated :-) Thanks!

-----SOLUTION----- Here's an alternative way too just in case others were wondering.

    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 Answer 1

1

If your intention is to pass an array of checked cell values to a view, why adding and removing objects at each cell selection? You could easily achieve this just before you're about to present the new view controller. Something like this:

// 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. You still have to manage checking/unchecking of cells (just as you're already doing in the code above).

Sign up to request clarification or add additional context in comments.

2 Comments

I need the array to add values into an sql statement.
@Far: okay... and what seems to be the problem using names array from my example?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.