在 tableView 中显示过滤数组中的数据

Posted

技术标签:

【中文标题】在 tableView 中显示过滤数组中的数据【英文标题】:Displaying data in a tableView from a filtered array 【发布时间】:2016-07-08 20:33:28 【问题描述】:

我编写了从 Core Data 过滤事件的代码,并且只打印日期属性等于日历中选择的日期的事件。代码如下:

let predicate = NSPredicate(format: "eventPastStringDate = %@", formatter.stringFromDate(selectedDate))

//This prints the exact data that I want
print((eventsPast as NSArray).filteredArrayUsingPredicate(predicate))

这很有效,它会过滤我想要的数据,并且只打印我想要的事件。问题是我不知道如何在 tableView 中显示这些数据。通常我可以在 cellForRowAtIndexPath 中像这样在 tableView 中显示 Core Data 中的所有数据...

let ePast = eventsPast[indexPath.row]
let cellPast = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell

// Sets labels in cell to whatever user typed in on the events page
cellPast.titlePrototypeCell!.text = ePast.eventPastTitle!
cellPast.datePrototypeCell!.text = "Date: " + ePast.eventPastDateLabel!

return cellPast

...但我不确定如何像上面那样以数组的形式访问新数据。有任何想法吗?

【问题讨论】:

这是斯威夫特!使用像 filter 这样的原生 Swift 函数,而不是桥接到 NSArrayNSPredicate。只需将过滤操作的结果分配给数据源数组即可。 如果你有机会可以举个例子吗?我已经查看了所有内容,这似乎是与 Core Data 一起使用的唯一方法。 从 Core Data 中获取过滤数据的最佳方式是分配给 fetch 请求的谓词。这里有数千个关于 SO 的示例以及 Core Data 文档中的示例代码如何做到这一点。 【参考方案1】:

您的班级中将有第二个数组。当没有过滤器时,这两个数组是相同的。当有过滤器时,您将拥有一个包含绝对所有内容的主数组,而过滤后的数组是一个小子集。

(class var) myFilteredArray = (eventsPast as NSArray).filteredArrayUsingPredicate(predicate)

然后在你的 tableview 方法中:

let ePast = myFilteredArray[indexPath.row]

并确保将表格行大小设置为过滤后的数组计数,而不是主数组计数。否则你会出界崩溃。

【讨论】:

我收到一个错误:“AnyObject”类型的值没有成员“eventPastTitle” 您的过滤器函数正在返回一个AnyObject 数组。将它投射到您所知道的课程中,然后继续生活。

以上是关于在 tableView 中显示过滤数组中的数据的主要内容,如果未能解决你的问题,请参考以下文章

MKMapItem 数组中的双变量

在二维数组中搜索 tableView objC

如何从属于 UITableView 中的模型数组对象的数组中向 tableView 显示数据?

使用数组中的新信息更新该对象并显示 tableview Swift

如何快速组合数组中的元素并在tableView上显示

如何在 ipad 中的 tableview 单元格上显示弹出框单击