在我的应用中,我想每周询问一下,他们是否愿意为应用评分。
所以我试着建立一个日期,我检查它是否已经通过,如果它已经通过,同时它要求评级并将日期更改为(Nsdate())加上一周:
var rateDatum: NSDate {
get {
let defaults = NSUserDefaults.standardUserDefaults()
if let date = defaults.objectForKey("rateDatum") {
return date as! NSDate
}else{
let Datum = NSDate()
Datum.dateByAddingTimeInterval(120)
return Datum
}
}
set (newValue) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(newValue, forKey: "rateDatum")
}
}
// the function for checking
func checkRateDatum(){
let components = NSDateComponents()
components.year = 2000
components.month = 1
let calender = NSCalendar.currentCalendar()
let newDatum = calender.dateFromComponents(components)
if rateDatum != newDatum! {
let currentdate = NSDate()
if currentdate.compare(rateDatum) == NSComparisonResult.OrderedDescending {
print("alert")
let alertMotion = UIAlertController(title: "Rate?", message: "Would you mind rating the app?", preferredStyle:UIAlertControllerStyle.Alert)
alertMotion.addAction(UIAlertAction(title: "5 Sterren", style: UIAlertActionStyle.Default){action in
//Rederect to app's url
})
alertMotion.addAction(UIAlertAction(title: "Later", style: UIAlertActionStyle.Cancel){action in
//change RateDatum
self.rateDatum = NSDate()
self.rateDatum.dateByAddingTimeInterval(604800)
})
alertMotion.addAction(UIAlertAction(title: "Never", style: UIAlertActionStyle.Default){action in
//verander datum zo dat hij niet meer wordt gezien
self.rateDatum = newDatum!
})
self.presentViewController(alertMotion, animated: true, completion: nil)
}
}
}
但这并没有真正起作用,检查日期是否过去真的很奇怪。
我希望它每周都能提出来,但前提是用户正在使用该应用程序 所以它会检查日期是否过去 我也希望用户选择Never,所以弹出窗口永远不会再来。
有人知道我的代码有什么问题吗 或者知道更好的方法来处理费率应用程序弹出窗口?
聚苯乙烯。对不起,如果问题不清楚,我不是英文,所以我觉得提问真的很难。
更新:所有代码,如果有人需要它。
var userUninterestedInRating: Bool {
get {
let defaults = NSUserDefaults.standardUserDefaults()
return defaults.boolForKey("userUninterestedInRating")
}
set (newvalue) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setBool(newvalue, forKey: "userUninterestedInRating")
}
}
var rateDatum: NSDate {
get {
let defaults = NSUserDefaults.standardUserDefaults()
if let date = defaults.objectForKey("rateDatum") {
return date as! NSDate
}else{
let Datum = NSDate(timeIntervalSinceNow: 604800)
defaults.setObject(Datum, forKey: "rateDatum")
return Datum
}
}
set (newValue) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(newValue, forKey: "rateDatum")
}
}
func checkRateDatum(){
if !userUninterestedInRating {
let currentdate = NSDate()
if currentdate.compare(rateDatum) == NSComparisonResult.OrderedDescending {
let alertMotion = UIAlertController(title: "Rate?", message: "Would you mind rating the app?", preferredStyle:UIAlertControllerStyle.Alert)
alertMotion.addAction(UIAlertAction(title: "5 Sterren", style: UIAlertActionStyle.Default){action in
//Rederect to app's url
})
alertMotion.addAction(UIAlertAction(title: "Later", style: UIAlertActionStyle.Cancel){action in
//change RateDatum
self.rateDatum = NSDate(timeIntervalSinceNow: 604800)
})
alertMotion.addAction(UIAlertAction(title: "Never", style: UIAlertActionStyle.Default){action in
//verander bool zo dat hij niet meer wordt gezien
self.userUninterestedInRating = true
})
self.presentViewController(alertMotion, animated: true, completion: nil)
}
}
}
答案 0 :(得分:2)
1)此代码:
self.rateDatum = NSDate()
self.rateDatum.dateByAddingTimeInterval(604800)
将rateDatum设置为当前日期/时间。它不向rateDatum添加任何内容。请注意,dateByAddingTimeInterval:
会返回新 NSDate对象。
更好的是:
rateDatum = NSDate(timeIntervalSinceNow: 604800)
2)使用!=
比较日期是不合适的,除非您已经超载运算符以使用NSDates。您需要使用比较来比较它们。