Создание массива из полученных основных данных - PullRequest
0 голосов
/ 07 февраля 2019

Я могу получить данные из основных данных, но теперь я хочу создать массив со столбцом названия игры, чтобы я мог использовать этот массив для заполнения представления выбора

import UIKit
import CoreData

class GameViewController: UIViewController, NSFetchedResultsControllerDelegate, UIPickerViewDelegate, UIPickerViewDataSource {

    var gameCourse: [String] = [String]()
    var frc : NSFetchedResultsController = NSFetchedResultsController<NSFetchRequestResult>()
    var pc = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    @IBOutlet weak var inputGameDate: UIDatePicker!
    @IBOutlet weak var inputGameCourse: UIPickerView!

    func fetchRequest() -> NSFetchRequest<NSFetchRequestResult> {

        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Course")
        let sorter = NSSortDescriptor(key: "coursename", ascending: true)
        fetchRequest.sortDescriptors = [sorter]

        return fetchRequest
    }

    func getFRC() -> NSFetchedResultsController<NSFetchRequestResult> {

        frc = NSFetchedResultsController(fetchRequest: fetchRequest(), managedObjectContext: pc, sectionNameKeyPath: nil, cacheName: nil)
        return frc
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.inputGameCourse.delegate = self as UIPickerViewDelegate
        self.inputGameCourse.dataSource = self as UIPickerViewDataSource

        frc = getFRC()
        frc.delegate = self

        do {

            try frc.performFetch()
        }
        catch {

            print (error)
            return
        }

        //self.pickerView.reloadData()

        gameCourse = ["Eagle Canyon","Ruimsig"]
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // Number of columns of data
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    // The number of rows of data
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return gameCourse.count
    }

    // The data to return fopr the row and component (column) that's being passed in
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return gameCourse[row]
    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

реализовать этот статический метод в вашем курсе (NSManagedObject) и использовать его как Course.sortedCourses

    import CoreData
    class var sortedCourses: [Course] {
        let fetchRequest: NSFetchRequest<Course> = self.fetchRequest()
        fetchRequest.sortDescriptor = NSSortDescriptor(keyPath: \Course.coursename, ascending: true)
        return (try? pc.fetch(fetchRequest)) ?? []
    }
0 голосов
/ 07 февраля 2019

Прежде всего, вы, вероятно, хотите выполнить запрос для Course объектов:

func fetchRequest() -> NSFetchRequest<Course> {
    let fetchRequest = NSFetchRequest<Course>(entityName: "Course")
    let sorter = NSSortDescriptor(key: "coursename", ascending: true)
    fetchRequest.sortDescriptors = [sorter]

    return fetchRequest
}

Затем, чтобы фактически выполнить запрос и получить имена из результата:

do {
   let courses: [Course] = try pc.fetch(fetchRequest())
   gameCourse = courses.map(course -> course.coursename)
} catch {
   print(error)
   return
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...