【发布时间】:2019-01-20 03:09:02
【问题描述】:
我在 CoreData 中有一个 JOURNEY 实体。它具有到达日期和离开日期作为属性。
arrivalDate 和 leaveDate 都是 NSDate 类型?
我只想获取那些持续时间超过一个小时的旅程。
为了实现这一点,我在 Journey+CoreDataClass 中创建了一个瞬态属性
public var isJourneyLongEnough: Bool{
if let arrival = arrivalDate as Date?, let departure = departureDate as Date?{
let duration = departure.timeIntervalSince(arrival)
return duration >= 3600 ? true : false
} else{
return false
}
}
当我尝试获取它时崩溃并出现错误:*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:在实体中找不到“keypath isJourneyLongEnough”。
在研究有关此问题的更多信息时,我发现我们不能在谓词中使用瞬态属性,因为在从 persistentStore 获取托管对象时这些属性不存在。
您不能使用基于瞬态属性的谓词进行获取(尽管您可以使用瞬态属性自己在内存中进行过滤)。 ...总而言之,如果您直接执行 fetch,则通常不应将基于 Objective-C 的谓词或排序描述符添加到 fetch 请求中。相反,您应该将这些应用于获取的结果。
实现这一目标的最佳方法是什么?我正在使用 FetchedResultsController 在 UITableView 中显示所有旅程
【问题讨论】:
标签: ios swift core-data nsfetchedresultscontroller