0

目前,我刚刚开始在 Swift 的核心数据中使用 NSFetchedResultsController 中的 sectionNameKeyPath /

我的应用程序的图像

最初,我不知道如何将不同的单元格分成各自的日期。但是现在我已经将单元格分成了各自的日期,它们的 indexPath 都搞砸了,因为当我执行 segue 以导致第二个 viewController 时,值被搞砸了。

例如

  • 第二个 $42.5 -> $9.0,
  • 10 美元 -> 9.0 美元,
  • 72.0 美元 -> 42.5 美元,
  • $0.0 -> $99.0 和 $9.0 -> $10.0

如果有人能教我如何在从 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)")
    }
}

这是我获取数据的代码

PS我认为这可能与我的“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)
    }
}
4

2 回答 2

0

您的排序描述符需要包括作为节的字段和节内的行,因此将价格属性的排序描述符添加到现有的。

于 2018-05-06T06:28:49.377 回答
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 的最简单的解决方案

于 2018-05-12T07:50:55.420 回答