xcode - Issue with NSDataStorage in simple reflex test game app -


i'm trying store array of numbers in nsuserdatastorage..what doing wrong? thanks. import uikit

class viewcontroller: uiviewcontroller { var arr = [int]() var timer = nstimer() var countdowntimer = nstimer() var count = 0 var countdown = int(arc4random_uniform(4000) + 1000) var highscore:int!   @iboutlet weak var beginbutton: uibutton!      @iboutlet weak var startbutton: uilabel! @iboutlet weak var highscorebutton: uilabel! @iboutlet weak var timerlabel: uilabel! @iboutlet weak var backgroundimage: uiimageview!  func updatetime() {     countdown = countdown - 1     if countdown <= 0 {         startbutton.textcolor = uicolor.blackcolor()         startbutton.text = "tap now!"         countdowntimer.invalidate()         backgroundimage.image = uiimage(named: "red")         count = 0         timer()     } }  func timer() {     timer = nstimer.scheduledtimerwithtimeinterval(0.001, target:self, selector:selector("reflextest"), userinfo:nil, repeats: true)  }  func reflextest() {     count = count + 1     timerlabel.text = "\(count) ms" }     @ibaction func begintapped(sender: anyobject) {     if startbutton.text == "tap when color changes" {         startbutton.text = "you tapped early!"         countdowntimer.invalidate()         countdown = int(arc4random_uniform(4000) + 1000)     } else {     if count == 0 {     countdowntimer = nstimer.scheduledtimerwithtimeinterval(0.001, target: self, selector: selector("updatetime"), userinfo: nil, repeats: true)     startbutton.text = "tap when color changes"         countdown = int(arc4random_uniform(4000) + 1000)         timerlabel.text = "\(count) ms"     } else {         timer.invalidate()         backgroundimage.image = uiimage(named: "green")         startbutton.text = "tap begin"         arr.append(count)         count = 0         highscore = minelement(arr)         highscorebutton.text = "best: \(highscore)"         self.viewdidload()         }      }  }      override func viewdidload() {     super.viewdidload()     nsuserdefaults.standarduserdefaults().setobject(arr, forkey: "data")     arr = nsuserdefaults.standarduserdefaults().objectforkey("data") as! [int]     println(arr)             // additional setup after loading view, typically nib. }  override func didreceivememorywarning() {     super.didreceivememorywarning()     // dispose of resources can recreated. } 

}

im trying make when view loaded, takes data permanent storage, sets array equal it, , user plays game, when clicks end button, takes data, , stores in array, , takes permanent storage. how may without using core data?

you've got idea nsuserdefaults—just read , write needed. abstract away methods (or separate objects) have intuitive interface save , load.

if data gets more complex, may want writing data file on device nskeyedarchiver , nscoding in order serialize , deserialize easily.

see nshipster article more info on that.

class viewcontroller: uiviewcontroller {     var arr = [int]()      let kdefaultskey = "com.mycompany.myapp.numbers"      override func viewdidload() {         super.viewdidload()         self.loaddefaults()     }      func randomnumner() -> int {         return int(arc4random() % 100)     }      @ibaction func buttontapped(sender: anyobject) {         arr.append( randomnumber() )         self.savedfeaults()     }      func loaddefaults() {         if let savedarray = nsuserdefaults.standarduserdefaults().objectforkey( kdefaultskey ) as? [int] {             self.arr = savedarray         }     }      func savedfeaults() {         nsuserdefaults.standarduserdefaults().setobject( self.arr, forkey: kdefaultskey )     } } 

Comments