Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

iOS

Swift : Entity Attribute is not incrementing after 1st tap

http://stackoverflow.com/questions/31821015/making-a-counter-app-do-i-have-to-do-something-after-saving-to-core-data

Hi all,

I'm making a cookie-clicker clone and building out the basics of it right now. I have an IBAction in my View Controller that basically increments an attribute "Points" in my data model entity "Score" every time you tap an image.

However, what is happening is that the Points.score only increments after the 1st tap, and then it stays the same for every tap afterwards. I'm pretty sure I'm supposed to be doing something after I call the managedObjectContext.save() function, but I don't know what.

The code is below.

@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)"
}