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);

    }
4

1 に答える 1

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。セルのチェック/チェック解除を管理する必要があります (上記のコードで既に行っているように)。

于 2012-06-21T21:25:25.437 に答える