I have two elements:
NSMutableArray* mruItems;
NSArray* mruSearchItems;
I have a UITableView
that holds the mruSearchItems
basically, and once the user swipes and deletes a specific row, I need to find ALL matches of that string inside the mruItems
and remove them from there.
I haven't used NSMutableArray enough and my code gives me errors for some reason:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//add code here for when you hit delete
NSInteger i;
i=0;
for (id element in self.mruItems) {
if ([(NSString *)element isEqualToString:[self.mruSearchItems objectAtIndex:indexPath.row]]) {
[self.mruItems removeObjectAtIndex:i];
}
else
{
i++;
}
}
[self.searchTableView reloadData];
}
}
Error: I see now that some of the strings are not between quotation marks (the ones in UTF8 are though)
Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x1a10e0> was mutated while being enumerated.(
"\U05de\U05e7\U05dc\U05d3\U05ea",
"\U05de\U05d7\U05e9\U05d1\U05d5\U05df",
"\U05db\U05d5\U05e0\U05df",
"\U05d1 ",
"\U05d1 ",
"\U05d1 ",
"\U05d1 ",
Jack,
Beans,
Cigarettes
)'
You get an exception because you are mutating a container while iterating over its elements.
removeObject:
does exactly what you're looking for: removing all objects that are equal to the argument.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle != UITableViewCellEditingStyleDelete)
return;
NSString *searchString = [self.mruSearchItems objectAtIndex:indexPath.row];
[self.mruItems removeObject:searchString];
[self.searchTableView reloadData];
}
您无法在枚举整个集合的同时对其进行编辑,而是将其存储起来,然后通过遍历索引数组将其删除。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.