Swift:使用sectionNameKeyPath的单元格的indexPath

时间:2018-05-05 14:54:39

标签: ios swift uitableview core-data indexpath

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

image of my app

最初,我不知道如何将不同的细胞分成各自的日期。但是现在我已经将单元格分成了相应的日期,它们的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)")
    }
}

这是我获取数据的代码

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)
    }
}

2 个答案:

答案 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的最简单的解决方案