swift - 根据 NSManagedObject 数组中的特定属性来调节 tableview 数据和行数的最佳方法是什么
问题描述
我有一个带有日期属性的 nsmanagedobject 数组。我试图让我的表格视图只加载具有今天日期属性的对象。设置行数并根据任何 nsmanagedobject 数组中的属性设置单元格的最佳方法是什么。我可以使用多个数组来解决它,但这会使我的代码成为这样的消息,尤其是在我的上下文操作中。任何帮助或提示表示赞赏:) 我在一个 tableview 控制器中有多个 tableview,我有一个数组来填充它们。
解决方案
编辑:
根据您的代码执行此操作的另一种方法很可能不是执行此操作的最佳方法,即使用如下过滤器函数:
首先,将此函数添加到日期扩展中:
extension Date {
func isSameDate(_ comparisonDate: Date) -> Bool {
let order = Calendar.current.compare(self, to: comparisonDate, toGranularity: .day)
return order == .orderedSame
}
}
然后过滤您现有的数组(请记住,除非您存储该过滤后的数组,否则您将多次过滤 - 在 numberOfRows 和 cellForRow 中):
let todaysItems = items.filter{ $0.isSameDate(Date()) }
您可以通过简单地创建一个函数来做到这一点:
func loadTodaysItems() -> [Item] {
let request: NSFetchRequest<Item> = Item.fetchRequest()
let startDate = Date().startOfDay
let endDate = Date().endOfDay
request.predicate = NSPredicate(format: "date != nil AND date >= %@ AND date <= %@", startDate as NSDate, endDate as NSDate)
/// (Optional) if you want to sort items by date
request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
do {
return try context.fetch(request)
} catch {
print("Error fetching data from context: \(error)")
}
return []
}
另外,请确保添加此扩展程序:
extension Date {
var startOfDay: Date {
return Calendar.current.startOfDay(for: self)
}
var endOfDay: Date {
var components = DateComponents()
components.day = 1
components.second = -1
return Calendar.current.date(byAdding: components, to: startOfDay)!
}
}
推荐阅读
- installation - 无法使用 npm 命令安装电子 - 出现错误“无法获取本地颁发者证书”
- firebase - 如何根据firebase querySnapshot结果调用不同的Flutter函数
- python - Python 递归函数。类型错误:table() 缺少 1 个必需的位置参数:'m'
- python - 如何在使用 Python 下载之前对气候数据进行子集化?
- asp.net - 如何将 ASP.Net 5(核心)授权属性重定向到 401
- python - 如果 len(row) == 2 (python, csv) 添加行
- python-3.x - 使用 Fernet 创建自定义 Django 加密字段
- matlab - 我可以使用带有积分动作和状态反馈的 Acker 函数吗
- javascript - 对从异步函数返回的承诺感到非常困惑
- reactjs - 我无法使用 DRF 和 REACT 从 RESTful API 获取数据