gpt4 book ai didi

swift - 制作计数器应用程序 - 保存到核心数据后我需要执行某些操作吗?

转载 作者:行者123 更新时间:2023-11-30 14:10:36 26 4
gpt4 key购买 nike

尝试使用 Swift 并创建我的第一个“应用程序”。我本质上是在创建一个 cookie 点击器克隆,您只需重复单击屏幕中央的图像即可增加您的分数。

我遇到了一些问题,单击图像一次会将我的分数增加 1,但再次单击该图像时,分数仍为 1。

我几乎肯定在保存到 CoreData 后我应该做一些事情 - 我只是不知道做什么。我必须刷新 View 吗?抱歉新手问题

@IBAction func tapHomeImage(sender: AnyObject) {
//Score is the name of my Entity, with "points" being an attribute
let entity = NSEntityDescription.entityForName("Score", inManagedObjectContext: managedObjectContext!)
let score = Score(entity: entity!, insertIntoManagedObjectContext: managedObjectContext!)

// **As an aside question, is there a more efficient way to code the below? The issue I have is that score.points is of type NSNumber
let intScore = score.points as Int
let incrementedIntScore = intScore + 1
score.points = NSNumber(integer: incrementedIntScore)

var error: NSError?
managedObjectContext?.save(&error)

//homeScoreLabel is an IBOutlet for the Score displayed on the page
homeScoreLabel?.text = "\(score.points)"
}

非常感谢!

最佳答案

保存之后不需要执行任何操作,您需要在调用此方法之前执行一些操作。您需要找到一个已经存在的 Score 实例,并使用它。

当你到达这一行时:

let score = Score(entity: entity!, insertIntoManagedObjectContext: managedObjectContext!)

每次运行此方法时,您都会创建一个 Score 实体的新实例。所以当你这样做时:

let intScore = score.points as Int
let incrementedIntScore = intScore + 1
score.points = NSNumber(integer: incrementedIntScore)

您每次都在使用一个全新的实例。分数最初为零,并且您总是将其增加到 1。

你应该做什么:

  1. 使用 Score 的单个实例并将其保存为 View Controller 的属性。也就是说,有这样的东西:

    var score: Score?
  2. 加载 View Controller 时,一次为此属性赋值。由于您正在保存数据,因此您应该使用 executeFetchRequest 来查找以前保存的实例。如果先前的实例不存在,通过 insertIntoManagedObjectContext 创建一个新实例。

  3. 在此 IBAction 中使用该实例。

还有其他方法可以修复代码。关键是要确保每次都使用相同的 Score 实例,而不是每次点击都创建一个新实例。

关于swift - 制作计数器应用程序 - 保存到核心数据后我需要执行某些操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31821015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com