在我下面的代码中,每次按下按钮时,变量数字都会增加10。我想覆盖旧的号码,然后保存,获取并显示在视图上。不幸的是,我在func fetchStats()中得到以下错误消息:如何将可选类型分配给类型实体?或者更容易说:我如何用旧的变量覆盖现有的变量“number”,然后保存,用核心数据获取它(到具有属性(值)的实体(Statsohs)),最后显示它?
import UIKit
import CoreData
class ViewController: UIViewController {
var number : Double = 0
//Reference to Managed Object Context
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
//Data for the Stats
var average : Statsohs?
@IBOutlet weak var LabelStats: UILabel!
//--------------------------------------------------------------------------------------
override func viewDidLoad() {
super.viewDidLoad()
fetchStats()
}
//--------------------------------------------------------------------------------------
@IBAction func ActionButton(_ sender: UIButton) {
number = number + 10
average = Statsohs(context: context)
average?.value = number
LabelStats.text = String(format: "%.2f", average!.value)
//Save the data
do {
try context.save()
}
catch {
}
}
//--------------------------------------------------------------------------------------
func fetchStats() {
//Fetch the data from CoreData to display in the View
do {
average = try context.fetch(Statsohs.fetchRequest())
//Cannot assign value of type '[Statsohs]' to type 'Statsohs'
}
catch {
}
}
}
字符串
我在一开始尝试了不同的平均值声明,例如:平均值:[Statsohs]?但是,我将在平均值= Statsohs(conext:context)并且类型“[Statsohs]”的成员也没有成员“value”
我希望它有可能以这种方式分配值到Statsohs,保存,获取,显示每次更新的值。
1条答案
按热度按时间ffx8fchx1#
fetch
始终返回记录数组(多个项目),即使只有一个记录。若要覆写记录的属性,您必须撷取记录、修改属性并将其存回。
在
fetchStats
中,提取数组中第一个记录(单个)。将其分配给average
,并将其value
分配给number
。如果不存在,则创建一个并将零分配给value
字符串
在
actionButton
中,将number
递增10,将结果赋值给value
,显示并保存数据型
最后添加helper方法
displayData
和saveData
型