我搜索了論壇,並有不少關於UIDatePicker的奇怪行爲的帖子,但沒有解決方案解決了我的問題。UIDatePicker的時間返回非常奇怪的結果
我有一個簡單的UIDatePicker這樣初始化:
self.picker = [[UIDatePicker alloc] init];
self.picker.datePickerMode = UIDatePickerModeTime;
self.picker.calendar = [NSCalendar currentCalendar];
self.picker.timeZone = [NSTimeZone localTimeZone];
self.picker.date = self.initialDate;
[self.view addSubview:self.picker];
這在一個簡單的視圖(沒有XIB,沒有界面生成器,只是簡單的代碼)的viewDidLoad方法完成。
現在我有一個按鈕,它檢索日期並「處理」它。由於日期選擇器不允許用戶設置秒,我只想將它們重置爲零(因爲我需要稍後比較日期)。因爲日期選擇器不允許用戶設置秒,所以我只想將它們重置爲零。
當我選擇「16:00」(這是下午4:00)日誌輸出是:
2012-05-21 17:43:48.428 Green Thumb[26828:fb03] 0001-01-01 14:55:36 +0000
2012-05-21 17:43:48.428 Green Thumb[26828:fb03] 0001-01-01 16:00:56 +0000
2012-05-21 17:43:48.429 Green Thumb[26828:fb03] 0001-01-01 16:00:00 +0000
2012-05-21 17:43:48.429 Green Thumb[26828:fb03] 0001-01-01 14:54:40 +0000
因此,從選擇器拍攝的原始日期是完全關閉。組件(根據拾取器日期創建的)所用的時間是正確的,修正時間也是如此。但是當我把這些組件放回到NSDate實例中時,它們都會再次混亂(但不同)。
我和谷歌我們都沒有想法,所以我希望我們可以在這裏創建一些新的!
由於提前,LetzFlow
PS:我的iPhone 5.1模擬器測試這一點。
編輯#1:
我已經找到了實際的問題,但我又堅持:
我跟蹤它到以下一點:我存儲的具體日期, NSUserDefaults對象。
NSUserDefaults defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:[NSNumber numberWithFloat:[time timeIntervalSince1970]] forKey:@"notification.time"];
在這裏,我又弄出來了:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSNumber num = [defaults valueForKey:@"notification.time"];
NSDate* time = [NSDate dateWithTimeIntervalSince1970:[num floatValue]];
足夠有趣:我所付出的,是不是有什麼出來!但爲什麼? :)
編輯#2: 最後但並非最不重要我已經解決它自己。謝天謝地,因爲這是有史以來最愚蠢的錯誤。 NSTimeInterval不是浮點數,而是雙精度浮點數。而直到現在,我從來沒有遇到任何問題,使用浮動保存在NSUserDefaults似乎已經提出了錯誤。