Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 从接收到的核心数据创建阵列_Swift - Fatal编程技术网

Swift 从接收到的核心数据创建阵列

Swift 从接收到的核心数据创建阵列,swift,Swift,我可以从核心数据中获取数据,但现在我想创建一个带有“游戏名称”列的数组,以便使用该数组填充选择器视图 import UIKit import CoreData class GameViewController: UIViewController, NSFetchedResultsControllerDelegate, UIPickerViewDelegate, UIPickerViewDataSource { var gameCourse: [String] = [String]()

我可以从核心数据中获取数据,但现在我想创建一个带有“游戏名称”列的数组,以便使用该数组填充选择器视图

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.
    }
    */

}
导入UIKit
导入CoreData
类GameViewController:UIViewController、NSFetchedResultsControllerDelegate、UIPickerViewDeleteGate、UIPickerViewDataSource{
var gameCourse:[String]=[String]()
var frc:NSFetchedResultsController=NSFetchedResultsController()
var pc=(UIApplication.shared.delegate为!AppDelegate).persistentContainer.viewContext
@IBOutlet弱var inputGameDate:UIDatePicker!
@IBOutlet弱var输入游戏课程:UIPickerView!
func fetchRequest()->NSFetchRequest{
let fetchRequest=NSFetchRequest(entityName:“课程”)
let sorter=nssortddescriptor(键:“coursename”,升序:true)
fetchRequest.sortDescriptors=[分拣机]
返回请求
}
func getFRC()->NSFetchedResultsController{
frc=NSFetchedResultsController(fetchRequest:fetchRequest(),managedObjectContext:pc,sectionNameKeyPath:nil,cacheName:nil)
返回frc
}
重写func viewDidLoad(){
super.viewDidLoad()
self.inputGameCourse.delegate=作为UIPickerViewDelegate的自我
self.inputGameCourse.dataSource=作为UIPickerViewDataSource的self
frc=getFRC()
frc.delegate=self
做{
试试frc.performFetch()
}
抓住{
打印(错误)
返回
}
//self.pickerView.reloadData()
游戏过程=[“鹰峡谷”、“鲁米斯格”]
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
//数据列数
func numberOfComponents(在pickerView:UIPickerView中)->Int{
返回1
}
//数据的行数
func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{
返回gameCourse.count
}
//返回fopr的数据是正在传入的行和组件(列)
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->String{
返回游戏路线[世界其他地区]
}
/*
//标记:-导航
//在基于故事板的应用程序中,您通常需要在导航之前做一些准备
覆盖功能准备(对于segue:UIStoryboardSegue,发送方:有吗?){
//使用segue.destination获取新的视图控制器。
//将选定对象传递给新的视图控制器。
}
*/
}

首先,您可能希望运行对
课程
对象的请求:

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

    return fetchRequest
}

首先,您可能希望运行
课程
对象的请求:

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

    return fetchRequest
}

在课程中实现此静态方法(NSManagedObject) 并像课程一样使用它

    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)) ?? []
    }
导入核心数据
课程类别:[课程]{
let fetchRequest:NSFetchRequest=self.fetchRequest()
fetchRequest.sortDescriptor=NSSortDescriptor(键路径:\Course.coursename,升序:true)
返回(try?pc.fetch(fetchRequest))??[]
}

在课程中实施此静态方法(NSManagedObject) 并像课程一样使用它

    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)) ?? []
    }
导入核心数据
课程类别:[课程]{
let fetchRequest:NSFetchRequest=self.fetchRequest()
fetchRequest.sortDescriptor=NSSortDescriptor(键路径:\Course.coursename,升序:true)
返回(try?pc.fetch(fetchRequest))??[]
}

您遇到了什么问题?甚至不使用NSFetchedResultsController,只需手动执行请求并获取结果。为什么只需要课程名称的数组?是仅用于显示目的,还是希望在之后从课程名称列表中选择一门课程?因为在一系列课程中获取完整的课程并用类似于return courses[row].name的内容填充选择器会更容易。如果要选择课程,则可以直接将课程从阵列发送到下一个控制器,而不是再次从核心数据中获取课程名称。您遇到了什么问题?甚至不要使用
NSFetchedResultsController
,只需手动执行请求并获得结果。为什么只需要课程名称的数组?是仅用于显示目的,还是希望在之后从课程名称列表中选择一门课程?因为在一系列课程中获取完整的课程并用类似于return courses[row].name的内容填充选择器会更容易。如果要选择课程,则可以直接将课程从阵列发送到下一个控制器,而不是再次从核心数据中获取课程名称。我发现以下错误使用未解析运算符“=>”现在应该得到修复。我是从memorySorry写的,这让我很痛苦,但我得到了以下两个错误->'之后的预期类型->'之后的预期类型我得到了以下错误使用未解析运算符'=>'现在应该得到修复。我是从memorySorry写的,这让我很痛苦,但我得到了以下两个错误->'后的预期类型->'后的预期类型