【发布时间】:2020-10-06 06:30:37
【问题描述】:
我正在显示生日列表。 我想以从一月开始到十二月结束的方式对它们进行排序,第二个 NSSortDescriptor 是一天。我想显示一个列表,其中最接近的生日首先出现。
目前它按完整的生日日期排序。因此,目前“2009 年 2 月 6 日”显示在“1997 年 2 月 8 日”之后,我不希望它显示,因为当想知道下一个生日何时到来时,年份无关紧要。
我的 FetchRequest 是什么样子的:
@FetchRequest(entity: Birthday.entity(), sortDescriptors: [
NSSortDescriptor(keyPath: \Birthday.date, ascending: true),
]) var birthdays: FetchedResults<Birthday>
我的列表是什么样的:
List {
ForEach(birthdays, id: \.self) { birthday in
ZStack {
NavigationLink(destination: DetailView(birthday: birthday)) {
EmptyView()
}.hidden()
BirthdayView(name: birthday.name ?? "Unknown Name", birthDate: birthday.date ?? Date())
}
}
.onDelete(perform: deleteBirthdays)
}
我正在使用 Core Data,这就是我的实体的样子:
使用最新的 XCODE 和 Swift。
提前致谢!
我试过了:
extension Date {
var isInToday: Bool { Calendar.current.isDateInToday(self) }
var nextBirthday: Date {
isInToday ? self : Calendar.current.nextDate(after: Date(), matching: Calendar.current.dateComponents([.month, .day, .hour, .minute], from: self), matchingPolicy: .nextTime)!
}
}
extension Birthday {
var nextBirthday: Date { date!.nextBirthday }
}
@FetchRequest(entity: Birthday.entity(), sortDescriptors: [
NSSortDescriptor(keyPath: \Birthday.nextBirthday, ascending: true)
]) var birthdays: FetchedResults<Birthday>
但是在运行应用程序时它会抛出这显示以下错误:
“线程 1:致命错误:无法从 KeyPath Swift.KeyPath 中提取字符串”
【问题讨论】:
-
谢谢我试过了,但它现在给出了这个错误:“表达式类型不明确,没有更多上下文”
标签: ios swift iphone core-data swiftui