尝试使用Swift并创建我的第一个“app”。我实际上是创建一个cookie-clicker克隆,你只需重复点击屏幕中心的图像就可以增加你的分数。
我遇到一些问题,点击图片一次会将我的分数增加1,但再次点击它时,分数会保持为1。
我几乎肯定我在保存到CoreData后应该做点什么 - 我只是不知道是什么。我必须刷新视图吗?对不起新手问题
@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)"
}
非常感谢!
答案 0 :(得分:0)
在保存之后,您无需执行任何操作,您需要在之前调用此方法。您需要找到已存在的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。
你应该做什么:
使用Score
的单个实例并将其另存为视图控制器的属性。也就是说,有这样的事情:
var score: Score?
在视图控制器加载时,为此属性分配一个值。由于您要保存数据,因此应使用executeFetchRequest
查找以前保存的实例。如果不存在先前的实例,则然后通过insertIntoManagedObjectContext
创建一个新实例。
在此IBAction
。
还有其他方法可以修复代码。关键是要确保每次都使用相同的Score
实例,而不是每次都创建一个新实例。