Swift My Fetched Results Controller没有在旧条目中对新条目进行排序
我有7个桌面视图,每天一个。我将带有名称、开始时间、结束时间等的课程模型添加到日表中,并保存到核心数据中。我的nsFetchedResultsController子类每天有7个实例。 它根据每个表上的开始时间对条目进行排序。在我的应用程序0.0、0.1上,一切正常。我在0.1和0.1.1之间进行了轻量级迁移。这只意味着添加一个名为“notes(String)”的新属性。 移民看起来很成功。没有发生什么事故,一切似乎都正常。 问题: 直到最近我才意识到,当我使用startTime添加一个新条目时,我的fetchedResultsController不会与旧的现有条目一起计算。 例如,我有一个两周前的旧列表(可能是上次应用程序更新之前的列表):Swift My Fetched Results Controller没有在旧条目中对新条目进行排序,swift,core-data,uikit,nsfetchedresultscontroller,core-data-migration,Swift,Core Data,Uikit,Nsfetchedresultscontroller,Core Data Migration,我有7个桌面视图,每天一个。我将带有名称、开始时间、结束时间等的课程模型添加到日表中,并保存到核心数据中。我的nsFetchedResultsController子类每天有7个实例。 它根据每个表上的开始时间对条目进行排序。在我的应用程序0.0、0.1上,一切正常。我在0.1和0.1.1之间进行了轻量级迁移。这只意味着添加一个名为“notes(String)”的新属性。 移民看起来很成功。没有发生什么事故,一切似乎都正常。 问题: 直到最近我才意识到,当我使用startTime添加一个新条目时,
- xy 14:00
- yy 14:30
- zz 18:00
- xyz 19:00
- xy 14:00
- yy 14:30
- zz 18:00
- xyz 19:00
- 新的10:00
- xy 14:00
- yy 14:30
- zz 18:00
- xyz 19:00
- 最晚9点
- 新的10:00
- yy 13:30
- xy 14:00
- zz 18:00
- xyz 19:00
- 最晚9点
- 新的10:00
import CoreData
class DayFetchedResultsController: NSFetchedResultsController<Lesson> {
override init(fetchRequest: NSFetchRequest<Lesson> = Lesson.fetchRequest(), managedObjectContext context: NSManagedObjectContext = CoreDataManager.shared.persistentContainer.viewContext, sectionNameKeyPath: String? = nil , cacheName name: String? = nil) {
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "startTime", ascending: true)]
super.init(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: sectionNameKeyPath, cacheName: name)
}
func setDayPredicate(_ formatString:String = "dayNumber = %i", day: Int ) {
let predicate = NSPredicate(format: formatString, day)
self.fetchRequest.predicate = predicate
}
func fetch(day: Int) {
setDayPredicate("dayNumber = %i", day: day)
do {
try self.performFetch()
} catch let fetchErr {
print("Failed to fetch results", fetchErr)
}
}
}
这是我发现的。 我使用startTime属性保存模型对象,如9:00,但实际上整个当前日期与年、月、日一起保存。控制台清楚地显示了这一点。那不是我想要的 以下是修复方法: 我添加了一个新的DateComponents()变量。我将其年、月、日设置为2001.01.01。然后我让我的约会选择者设定时间,分钟
var dateComponents: DateComponents = {
var dc = DateComponents()
dc.year = 2001
dc.month = 1
dc.day = 1
return dc
}()
dateComponents.hour = formatter.calendar.component(.hour, from: datePicker.date)
dateComponents.minute = formatter.calendar.component(.minute, from: datePicker.date)
startTime = formatter.calendar.date(from: dateComponents) ?? Date()
事实上,我不知道怎么做,因为我正在使用日期选择器来设置时间。日期选择器有一个日期,即使他们没有显示它。
var dateComponents: DateComponents = {
var dc = DateComponents()
dc.year = 2001
dc.month = 1
dc.day = 1
return dc
}()
dateComponents.hour = formatter.calendar.component(.hour, from: datePicker.date)
dateComponents.minute = formatter.calendar.component(.minute, from: datePicker.date)
startTime = formatter.calendar.date(from: dateComponents) ?? Date()