在筛选的数组中显示tableView中的数据

时间:2016-07-08 20:33:29

标签: ios uitableview core-data swift2 xcode7

我编写的代码可以过滤来自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中显示这些数据。通常我可以在tableView中显示CoreView中的所有数据,就像在cellForRowAtIndexPath中一样......

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

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

1 个答案:

答案 0 :(得分:1)

您将在班级中拥有第二个阵列。当没有过滤器时,两个阵列是相同的。当有一个过滤器时,你就拥有一个绝对一切的主数组,并且过滤后的数组是一个小子集。

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

然后在你的tableview方法中:

let ePast = myFilteredArray[indexPath.row]

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