目前,我刚开始在Swift的核心数据中使用NSFetchedResultsController中的sectionNameKeyPath /
最初,我不知道如何将不同的细胞分成各自的日期。但是现在我已经将单元格分成了相应的日期,它们的indexPath都被搞砸了,因为当我执行一个segue导致第二个viewController时,值被弄乱了。
例如
如果有人可以教我如何在从coreData获取之后正确调整indexPath以适合每个部分,那将非常有用。
func initialFetch() {
let fetchRequest: NSFetchRequest<Item> = Item.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "dates", ascending: false)] //sorting according to date
let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: "dates", cacheName: nil)
controller.delegate = self
self.controller = controller
do {
try controller.performFetch()
} catch {
fatalError("Failed to fetch entities: \(error)")
}
}
这是我获取数据的代码
P.S。我认为这可能与我的'didSelectRowAt'
有关 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let objs = controller.fetchedObjects, objs.count > 0 {
let item = objs[indexPath.row]
performSegue(withIdentifier: "TrackerVC", sender: item)
}
}
答案 0 :(得分:0)
您的排序描述符需要同时包含该部分的字段和该部分中的行,因此将price属性的排序描述符添加到现有的。
答案 1 :(得分:0)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let item = controller.object(at: indexPath)
performSegue(withIdentifier: "TrackerVC", sender: item)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "TrackerVC" {
if let destination = segue.destination as? TrackerVC {
if let item = sender as? Item {
destination.itemToEdit = item
}
}
}
}
所以这是我发现根据每个部分中的行执行segue的最简单的解决方案