CoreData, отображающий сохраненные поездки в виде таблицы - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь отобразить список всех поездок, записанных в приложении в стиле фитнеса, в виде таблицы, чтобы показать расстояние (булево) и дату (временную метку) каждой поездки.

В данный момент ятолько что создали переменную, которая будет содержать Поездки из файла основных данных.Когда я распечатываю journeysArray, он показывает 0 в консоли, хотя есть некоторые записанные поездки.

import UIKit
import CoreData

class SavedJourneysViewController: UITableViewController {

    var journeyArray: [Journey] = []

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print(journeyArray.count)
        return journeyArray.count

    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "JourneyItem", for: indexPath)
        return cell

    }

1 Ответ

0 голосов
/ 30 апреля 2019

Если Journey является вашим подклассом NSManagedObject, вы должны использовать NSFetchedResultsController для извлечения сохраняемых объектов.

Ваш SavedJourneysViewController должен иметь ссылку на экземпляр NSManagedObjectContext, который вы будете использовать для извлечения ваших Journey объектов. Предположим, что у вас есть viewContext свойство типа NSManagedObjectContext в вашем SavedJourneysViewController, которое устанавливается извне, где бы вы ни инициализировали SavedJourneysViewController.

Вы захотите объявить fetchedResultsController в SavedJourneysViewController.

private lazy var fetchedResultsController: NSFetchedResultsController<Journey> = {
    let fetchRequest: NSFetchRequest< Journey > = Journey.fetchRequest()
    let sortDescriptor = NSSortDescriptor(keyPath: \Journey.date, ascending: true)
    fetchRequest.sortDescriptors = [sortDescriptor]
    let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: viewContext, sectionNameKeyPath: nil, cacheName: nil)
    return fetchedResultsController
}()

Затем выполните выборку в viewDidLoad (например), вызвав try? fetchedResultsController.performFetch():

Затем в numberOfRowsInSection вернуть fetchedResultsController.sections?[section].objects?.count ?? 0:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return fetchedResultsController.sections?[section].objects?.count ?? 0
}

Не забудьте о реализации func numberOfSections(in tableView: UITableView) -> Int и возврате fetchedResultsController.sections?.count ?? 0:

func numberOfSections(in tableView: UITableView) -> Int {
    return fetchedResultsController.sections?.count ?? 0
}

В cellForRowAt настройте ячейку с Journey объектом:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = let cell = tableView.dequeueReusableCell(withIdentifier: "JourneyItem", for: indexPath)
    guard let journey = fetchedResultsController.sections?[indexPath.section].objects?[indexPath.row] as? Journey else {
        return cell
    }
    // handle cell configuration
    cell.textLabel?.text = String(journey.distance)
    return cell
}

Подробнее об использовании NSFetchedResultsController с UITableViewController -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...