Swift: indexPath ячеек, использующих sectionNameKeyPath - PullRequest
0 голосов
/ 05 мая 2018

В настоящее время я только начал использовать sectionNameKeyPath из NSFetchedResultsController в основных данных Swift /

image of my app

Изначально я не знал, как разделить разные ячейки на соответствующие даты. Но теперь, когда я разделил ячейки на соответствующие даты, все их indexPath облажались, потому что, когда я выполняю переход, чтобы привести ко второму viewController, значения перепутались.

Например

  • второй $ 42,5 -> $ 9,0,
  • 10 долларов США -> 9,0 долларов США
  • 72,0 $ -> 42,5 $
  • 0,0 -> 99,0 и 9,0 - 10,0

Было бы действительно полезно, если бы кто-нибудь мог научить меня, как правильно настроить indexPath для соответствия каждому разделу после извлечения из coreData.

    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 голосов
/ 12 мая 2018

Хорошо, после многих недель проб и ошибок, а также исследований, я наконец нашел самое простое решение для этого.

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

так что это самое простое решение, которое я нашел, чтобы выполнить переход в соответствии со строками в каждом разделе

0 голосов
/ 06 мая 2018

Ваш дескриптор сортировки должен включать как поле, являющееся разделом, так и строки в этом разделе, поэтому добавьте дескриптор сортировки для свойства цены к существующему.

...