所以,我有一个FetchedResultsController,用户可以在其中将行添加到tableView中。根据用户添加行时tableView应该创建的部分的日期。例如,如果您在某一天添加一行,则其上方的部分应显示您添加的日期,如果您在第二天添加一行,该部分应显示该日期,依此类推。
问题在于,当我添加一行时,应用程序崩溃并说:“致命错误:在解开可选值时意外发现nil”
我也知道这是与部分相关的代码导致错误的事实,因为我可以在开始使用部分之前完美地添加行。
这是引起我提到的错误的行:
self.foodTableView.insertSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Fade)
以下是用作sectionNameKeyPath的代码,其中变量“dater”是我的核心数据实体中“Date”类型的属性:
var formattedDateDue: String {
get {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .ShortStyle
dateFormatter.timeStyle = .NoStyle
return dateFormatter.stringFromDate(dater!)
}
}
其他部分相关代码:
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return self.fetchedResultsController.sections?.count ?? 0
func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) {
switch type {
case .Insert:
//ERROR ON THIS LINE
self.foodTableView.insertSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Fade)
case .Delete:
self.foodTableView.deleteSections(NSIndexSet(index: sectionIndex), withRowAnimation: .Fade)
default:
return
}
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if let sections = fetchedResultsController.sections {
let currentSection = sections[section]
return currentSection.name
}
return nil
}
所以,更清楚地说明我的问题是什么;在我的fetchedresultscontroller中向我的tableView中插入一个新行时,应用程序崩溃并说在解包可选值时它找到了nil。这些部分应按日期排序。
此外,如果不够清楚,这是使用sectionNameKeyPath(formattedDateDue)的代码:
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "formattedDateDue", cacheName: "Master")
以下是请求断点的图片:
还有更多变量,但我无法添加更多图片。