我想允許用戶在UIButton的動作中只執行一次內部的一些代碼。它如何實施?我發現NSTimer不適合這個用途。允許用戶每天只訪問一次UIButton(考慮時區)
回答
你可以使用NSUserDefaults的這樣
-(void)btnPressed:(id)sender{
NSDateFormatter *df = [NSDateFormatter new];
df.dateFormat = @"d/m/yyyy";
NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
if ([pref boolForKey:[df stringFromDate:[NSDate date]]]) {
// do nothing button is used
}else{
[pref setBool:YES forKey:[df stringFromDate:[NSDate date]]];
// do the daily operartion for one time
}
}
使用的NSTimer是壞主意,因爲如果你的應用程序被用戶殺死它不會有相同的計時器上重新啓動。你可能希望保存最後訪問日期,而且比現在最後訪問日期,類似這樣比較日期:
斯威夫特
//store lastAccessDate somewhere in your system NSUserDefaults for example
var lastAccessDate:NSDate!
//on button click or other action get today's date and compare to lastAccessDate
let newAccessDate = NSDate()
if (newAccessDate.timeIntervalSinceDate(lastAccessDate)/1000.0 > 24*60*60) {
//do something here
lastAccessDate = newAccessDate
}
Objective-C的
//store lastAccessDate somewhere in your system NSUserDefaults for example
NSDate *lastAccessDate;
//on button click or other action get today's date and compare to lastAccessDate
NSDate *newAccessDate = [NSDate date];
if ([newAccessDate timeIntervalSinceDate:lastAccessDate]/1000.0 > 24*60*60) {
//do something here
lastAccessDate = newAccessDate;
}
使用Objective c,但是NSTimer在這裏沒有用處。 –
你沒有在你的問題或標籤中提及編程語言。在Objective-C代碼看起來非常相似,我已經更新了我對這兩種語言的答案。 – NSDmitry
這條線是幹什麼的「if([newAccessDate timeIntervalSinceDate:lastAccessDate] /1000.0> 7 * 24 * 60 * 60)」 –
NSDate *lastAccessDate;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-dd-MM HH:mm:ss a"];
lastAccessDate = [dateFormatter dateFromString:[arrList valueForKey:@"LastUpdatedDate"]];
// //on button click or other action get today's date and compare to lastAccessDate
NSDate *newAccessDate = [dateFormatter dateFromString:[arrList valueForKey:@"CurrentTime"]];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *componentsForFirstDate = [calendar components:NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitYear fromDate:lastAccessDate];
NSDateComponents *componentsForSecondDate = [calendar components:NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitYear fromDate:newAccessDate];
if ([componentsForFirstDate day] != [componentsForSecondDate day])
- 1. 只允許用戶按一次UIButton
- 2. PHP - 允許用戶只訪問一次
- 3. 只允許用戶只讀訪問woocommerce
- 4. 一次只允許每個用戶一次登錄
- 5. php定時器只允許用戶每兩秒輸入一次
- 6. 只允許每週訪問一次網站?這可能嗎?
- 7. 允許用戶每天在Android中點擊菜單一次
- 8. 如何每天只允許服務器端提交一次
- 9. 只允許一次
- 10. 允許用戶每個班次發送一次數據到數據庫(每天一次,每晚一次)
- 11. WooCommerce每週只允許購買一次
- 12. 限制用戶每天只玩一次
- 13. web.config中的憑據只允許在一次訪問一個用戶嗎?
- 14. 允許用戶每天用Codeigniter提交數據3次
- 15. 使用GIT第一次:允許其他用戶訪問項目
- 16. 如何創建一個只允許每個用戶每天在HTML中提交一次的表單?
- 17. 只允許選擇一個UIButton
- 18. 只允許用戶訪問drupal 6中的一個模塊
- 19. drupal只允許訪問一個內容給認證用戶
- 20. 只允許管理員用戶訪問一個resque web界面
- 21. PHP - 只允許從一個域訪問
- 22. 只允許用戶爲每個電影
- 23. 允許用戶每24小時登錄一次
- 24. 只允許點擊一次
- 25. 如何對每個用戶每天只允許點擊一次的按鈕進行編碼?
- 26. 允許用戶使用htaccess訪問wordpress博客,只使用htaccess
- 27. 允許用戶使用CakePHP訪問API
- 28. 只允許Chrome用戶使用JS訪問網頁?
- 29. 只允許ipad應用程序用戶訪問某些文件
- 30. 只允許特定FB用戶訪問應用程序
儲存最後使用日期。檢查它是否是前一天。相應地允許/禁止,您可以使用NSTimer再次檢查每個分鐘,或編程允許值。 – Larme
@Larme但是使用設備日期不安全,因爲用戶可以通過設置更改設備日期。 –
你不能相信用戶數據。期。我認爲這是保護您的資源的錯誤方法 - 但如果仍然存在,您可能需要聯繫Web服務獲取有效的時間戳,並在離線情況下使該功能無用。不要忘記 - 你存儲在你的設備上的東西可能會被玷污。 – Eiko