사용자가 하루에 한 번 투표 할 수있는 응용 프로그램을 개발 중입니다. 이 시간 제한을 설정하기 위해 votingStatus Boolean 변수를 선언합니다. 이 값은 controlDate에 따라 다릅니다.이 값은 앱을 처음 실행하고 votingStatus가 true 인 경우 'nil'이 될 수 있습니다.NSUserdefaults가 예상대로 작동하지 않습니다.
그러나 응용 프로그램이 제대로 작동하지 않습니다. votingStatus 변수는 응용 프로그램을 재설정 한 후에 만 값을 변경합니다. 분명히 내가 기대했던 것이 아닙니다. 사용자가 버튼을 클릭 할 때마다 votingStatus 변수를 확인하고 업데이트해야합니다.
미리 공유 해 주셔서 감사합니다. 애플리케이션 흐름을 수정하는 방법에 대해 미리 감사드립니다. 내가 클래스의 ViewController 내부에서 작성한 코드 아래
:보기가 메모리에서 제거 될 때까지 시스템이 주에있는 viewDidLoad 메모리에 응용 프로그램을 유지, 그래서 만약의 UIViewController {}
var votingStatus: Bool?
@IBAction func yesButtonPressed(sender: AnyObject) {
//Check if votingStatus is true
if votingStatus == true {
//I'm using Parse for backend
var score = PFObject(className: "score")
score.setObject(1, forKey: "vote")
score.saveInBackgroundWithBlock{
(succes: Bool!, error: NSError!) -> Void in
if succes == true {
println("Done with ID \(score.objectId)")
//update NSUserdefaults
NSUserDefaults.standardUserDefaults().setObject(NSDate(), forKey: "controlDate")
// should I NSUserDefaults.standardUserDefaults().synchronize() below?
} else {
println(error)
//show alert
}
}
} else {
println("Status is \(votingStatus)")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Find if user haven't already voted within 1 day so if his/her voting status true
// var votingStatus: Bool?
//To retrive the control date value. First time it has nil value
var controlDate = NSUserDefaults.standardUserDefaults().objectForKey("controlDate") as? NSDate
var timeInterval = controlDate?.timeIntervalSinceNow
var dayInSeconds = 24.0 * 3600
if controlDate == nil {
votingStatus = true
} else {
if timeInterval < dayInSeconds {
votingStatus = false
} else {
votingStatus = true
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
(즉, 질문의 경우) 예 ... 당신이 (제대로 있지만 작동하지 않습니다 – Jack
'동기화를()'호출해야합니다 ( –
값'tomeIntervalSinceNow'이 날짜에 대한 반환 일에 대해 생각을 가지고 지난 1 분 전에 몇 초가 걸렸습니까? 즉, 1 분 전에 시간을 얻으려면 "지금"에 추가 할 숫자를 입력하고 비교를 보겠습니다. 또한 'viewDidLoad'는 아마도 이 코드에 가장 적합한 장소 - 한 번만 실행됩니다.이보기가 표시되는 동안 "일"이 만료되면 어떻게합니까? – Paulw11