Если я правильно понимаю вашу проблему, у вас есть массив и вы добавляете индексы в массив при каждом выборе строк. Это не сработает.
Я предлагаю вам иметь словарь для сопоставления выбранных строк,
NSMutableDictionary *selectedIndexDict;
В вашем didSelectRowAtIndexPath:
методе,
[selectedIndexDict setValue:[NSNumber numberWithBool:YES] forKey:[NSString stringWithFormat:@"%d", indexPath.row]];
И, по вашему cellForRowAtIndexPath:
методу,
[cell setAccessoryType:UITableViewCellAccessoryNone];
if ([[selectedIndexDict valueForKey:[NSString stringWithFormat:@"%d", indexPath.row]] boolValue]) {
[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
}