我正在开发允许用户每天投票一次的应用程序。要设置该时间限制,我声明voteStatus布尔变量。它的值取决于controlDate,它可以是" nil"如果第一次运行应用程序然后votingStatus是真的。
然而,该应用程序无法正常工作。仅在重置应用程序后,votingStatus变量才会更改其值。这显然不是我的预期。每次用户点击按钮时,我都需要检查并更新votingStatus变量。
提前感谢您分享您的想法如何纠正应用程序流程!
在我在ViewController类中编写的代码下面: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.
}
答案 0 :(得分:0)
viewDidLoad()被调用一次,直到您的视图从内存中删除,因此如果系统将您的应用程序保留在内存中一周viewDidLoad()将不会被调用。您可以设置除viewDidLoad()之外的日期计时器,也可以像在yesButtonPressed func中的viewDidLoad()中一样检查controlDate值。
答案 1 :(得分:0)
我还没有测试过,只是一个快速回答:也许你的方法在一个Optional上调用“timeIntervalSinceNow”是问题所在。为什么不将该行放入if-block,在那里你可以确定有一个值并用它包装!而不是?
var dayInSeconds = 24.0 * 3600
if controlDate == nil {
votingStatus = true
} else {
**var timeInterval = controlDate!.timeIntervalSinceNow**
if timeInterval < dayInSeconds {
votingStatus = false
} else {
votingStatus = true
}
}
}