如何在 UIPickerview 中制作用户生成的核心数据实体选项

Posted

技术标签:

【中文标题】如何在 UIPickerview 中制作用户生成的核心数据实体选项【英文标题】:How to make user generated core data entities options in a UIPickerview 【发布时间】:2020-06-09 04:50:54 【问题描述】:

所以我正在开发一个计算器应用程序,但当涉及到我的 UIPickerView 和我的核心数据时,我遇到了困难。我目前已对其进行了设置,因此用户可以使用核心数据实体保存设置。这也将实体的名称属性推送到数组。 UIPickerView 然后使用数组中的名称使用选定的核心数据实体自动填充字段。但是,我当前使用的数组在关闭应用程序后不会持续存在。我正在寻找一种将名称属性推送到数组的方法,以便数组在重新启动应用程序后存储数据。这样 UIPickerView 可以在重启后访问名称。

这是我目前做事的方式。

var pickerOptions = ["none"]

...

@IBAction func saveSettings (_ sender: Any)
...code to save settings...
coreDataManager.shared.createSetting(power: power, name:name)

pickerOptions.append(name)


func numberOfcomponents(in pickerView: UIPickerView)-> Int 
return 1

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component:Int) ->Int
return pickerOptions.count

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, inComponent component: Int)
return pickerOptions[row]

func pickerView(_ pickerView: UIPickerView, didSelectRow row:Int, inComponent component: Int)
let setting = coreDataManager.shared.fetchSetting(withName: pickerOptions[row])
...code for auto-populating...

【问题讨论】:

【参考方案1】:

好的,我想通了。我在我的核心数据处理程序中编写了一个函数来将我的所有实体转储到一个数组中。然后它循环遍历数组,取出所有 .name 属性。然后它返回该数组。然后在我的视图控制器中,我调用该函数并将其设置为一个变量。然后我将该变量用于我的 UIPickerView 数组。代码解决方案如下。

//function to generate array from core data. This happens in my coreDataManager file.

func fetchSettingName() ->[String] 
        let context = persistentContainer.viewContext
        var settingOptions = ["none"]
        let fetchRequest = NSFetchRequest<Settings>(entityName: "Settings")
        do
            let settings = try context.fetch(fetchRequest)

            for setting in settings
                settingOptions.append("\(setting.name!)")
            
            return settingOptions
        catch let fetchError 
            print("Failed to fetch companies: \(fetchError)")
        
        return [""]

//How I implemented it into my UIPickerView.This happens in my view controller

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
//calls an array out of core data. The array contains all the title properties for all setting entities

        let settingOptions = coreDataManager.shared.fetchPresetsName()
        return settingOptions.count

【讨论】:

以上是关于如何在 UIPickerview 中制作用户生成的核心数据实体选项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用完成按钮制作 UIPickerView?

Swift - 如何从 UIPickerView 生成数据的许多 UITextField 中读取数据 [关闭]

制作水平 UIPickerView

如何在 UIPickerView 中获取用户选择并在其他地方使用它?

当用户触摸已选择的行时如何隐藏 UIPIckerView

如何使用情节提要约束将两个 UIPickerView 并排均匀分布?