【发布时间】:2018-03-18 18:42:25
【问题描述】:
我有一个可变的对象数组,每个对象都有多个可以在详细视图中显示的属性。
我已经设置了按属性搜索的功能,它工作正常。它根据搜索到的字符显示过滤后的数组,但是当我在该过滤后的数组中滑动删除(尚未从搜索栏中取消)时,它会根据索引路径。
我使用相同的索引路径从主表和相应的对象中删除行(都在commitEditingStyle 内),但正如您可能看到的indexPath.row 过滤的可变数组上的某个对象不会必须在主可变数组上使用相同的indexPath 对应于相同的对象。 (例如,如果主数组是 Bob、Jamie、Sarah、Tom,并且我搜索“To”,Tom 将显示但在索引 0 处,因此当我尝试删除 Tom 时它会删除主数组中的 Bob。)
我希望用户能够从搜索内容中删除项目,并从数组和表中删除相同的项目及其属性。 直接从主表视图和数组正常删除工作正常。代码如下:
- (void)tableView:(UITableView *)tableView commitEditingStyle:
(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:
(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
if (isFiltered == YES) {
// Then we are in filtered search results, delete from both arrays and table views
[self.personArray removeObjectAtIndex:indexPath.row]
[self.filteredArray removeObjectAtIndex:indexPath.row]
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else { // normal table view, just remove at master array and table view
[self.personArray removeObjectAtIndex:indexPath.row]
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
}
您可能会看到indexPath.row 无法匹配每个数组中的相同项目。
【问题讨论】:
-
使用
ObjectClass *person = [self.filteredArray objectAtIndex:indexPath.row]; Find the index of that person inself.personArray` 获取当前人员(名称是唯一的?找出它们的区别,每个属性中的相等性?),并且您有要删除的索引。 -
@Larme 谢谢,这是一个解决方案。作为新成员,我不确定如何使用您的评论将问题标记为已回答。
-
您不能将评论标记为分辨率。您可以做以下两件事之一:让@Larme 将评论扩展为答案,然后标记它,或者继续post the solution yourself。
-
正如乔希所说,你不能。如果需要,我明天会发布一个完整的解决方案(我离开的地方已经很晚了)。
标签: ios objective-c arrays uitableview