I am making a clicker game and I need to have my NSTimers continue after closing the application. I looked this up first but I could not find a suitable answer for Swift. I think I can use UserDefaults but I am not sure how to apply it. Sorry if this is a duplicate question, I know there is a lot of information on this.
var timerVar = NSTimer.scheduledTimerWithTimeInterval(4, target: self,
selector: Selector("selectorName"), userInfo: nil, repeats: true)
func selectorName(){
var ScoreDefault = NSUserDefaults.standardUserDefaults()
ScoreDefault.setValue(Score, forKey: "Score")
ScoreDefault.synchronize()
Score+=1
scoreLbl.text = "\(Score)"
}
Ok I figured it out. However it is not pretty but effective i'll post the code maybe someone can clean it up or use a different method. I ended up making another variable called scoreIncrementor then made a NSTimer in the didMoveToView that ran every second doing a simple equasion of score = score + scoreincrementor. Here is the code should anyone need it feel free to edit to your hearts delight. For this I also made another label just to see what is being added "tempScoreLbl".
var ScoreIncrementor = Double()
var Score = Double()
var scoreLbl: UILabel!
var tempscoreLbl: UILabel!
override func didMoveToView(view: SKView) {
var ScoreDefault = NSUserDefaults.standardUserDefaults()
if (ScoreDefault.valueForKey("Score") != nil){
Score = ScoreDefault.valueForKey("Score") as! Double
}
ScoreDefault.setValue(Score, forKey: "Score")
ScoreDefault.synchronize()
var ScoreIncrementorDefault = NSUserDefaults.standardUserDefaults()
if (ScoreIncrementorDefault.valueForKey("ScoreIncrementor") != nil){
ScoreIncrementor = ScoreIncrementorDefault.valueForKey("ScoreIncrementor") as! Double
}
ScoreIncrementorDefault.setValue(ScoreIncrementor, forKey: "ScoreIncrementor")
ScoreIncrementorDefault.synchronize()
let scorePerSecond = NSTimer.scheduledTimerWithTimeInterval(1 , target: self, selector: Selector("permanentIncrementor"),userInfo: nil, repeats: true)
self.view?.addSubview(scoreLbl)
self.view?.addSubview(tempscoreLbl)
}
func permanentIncrementor(){
Score = Score + ScoreIncrementor
var ScoreDefault = NSUserDefaults.standardUserDefaults()
ScoreDefault.setValue(Score, forKey: "Score")
ScoreDefault.synchronize()
scoreLbl.text = "\(Score)"
}
func gloveUpgrade(){
if Score >= 50{
let scorePerSecond = NSTimer.scheduledTimerWithTimeInterval(0 , target: self, selector: Selector("gloveUpgradeTimer"),userInfo: nil, repeats: false)
var ScoreIncrementorDefault = NSUserDefaults.standardUserDefaults()
ScoreIncrementorDefault.setValue(ScoreIncrementor, forKey: "ScoreIncrementor")
ScoreIncrementorDefault.synchronize()
Score-=50
tempscoreLbl.text = "\(ScoreIncrementor)"
}
}
func gloveUpgradeTimer(){
//increase score per minute by .25
var ScoreIncrementorDefault = NSUserDefaults.standardUserDefaults()
ScoreIncrementorDefault.setValue(ScoreIncrementor, forKey: "ScoreIncrementor")
ScoreIncrementorDefault.synchronize()
ScoreIncrementor+=0.25
tempscoreLbl.text = "\(ScoreIncrementor)"
}