2016-04-26 62 views
1

我有一個應用程序,爲您提供獲取每日提醒完成任務的選項。爲了在TestFlight上測試我的測試用戶,我設置了一個虛擬UIViewController,並在其中放置了一個開關來打開和關閉提醒以及UIDatePicker(僅限時間模式)以設置時間。當您第一次加載視圖時,它會讀取現有的UILocalNotification,並在UIDatePicker上顯示當前的設置時間。您可以啓用/禁用並更改通知時間。奇蹟般有效。UIDatePicker沒有迴應setDate

但是現在我已經完成了對我的TestFlight用戶的測試,我正在將功能移至新屏幕。所以我從頭開始重建整個事情,只是我將舊測試代碼View Controller複製並粘貼到新代碼中。所以他們幾乎是完全相同的。

唯一的區別是,新的一個已經放置在UITableViewCell而不是UIViewController之內 - 這樣它就可以很好地匹配應用程序的其餘設置。

在新的位置,它根據用戶是否啓用了提醒來正確設置開關狀態,並且我可以使用它來啓用/禁用它們。我也可以將提醒時間更改爲新的時間。奇蹟般有效。但是,當我加載新位置時,UIDatePicker顯示當前時間而不是在UILocalNotification中已預先確定的時間。我完全有理由解釋它。正如我所說的,代碼已被複制並從舊位置粘貼到新位置。舊的仍然有效。新的不是。以下是有問題的代碼。

我只能假設它與UITableViewCell有關,因爲這是唯一的區別,但我無法理解爲什麼在這個世界上很重要。

編輯:我一直在尋找解決這個問題的高點和低點,但沒有找到任何。看來使用setDate簡直沒有效果。我打印了所有的變量,看看它們返回的內容是否正確。這幾乎就像有什麼阻止UIDatePicker響應setDate。我無法找到解決這個問題的任何其他文章。我真的希望以前有人遇到過這個問題。

感謝您的任何幫助!

if let notificationArray = UIApplication.sharedApplication().scheduledLocalNotifications { 

     if notificationArray.count != 0 { 

      let oneNotification = notificationArray[0] 

      oneNotification.timeZone = NSTimeZone.defaultTimeZone() 

      let savedDate = oneNotification.fireDate 

      let calendar = NSCalendar.currentCalendar() 
      let components = NSDateComponents() 
      components.hour = calendar.component(.Hour, fromDate: savedDate!) 
      components.minute = calendar.component(.Minute, fromDate: savedDate!) 

      timePicker.setDate(calendar.dateFromComponents(components)!, animated: false) 


     } 

    } 

回答

0

所以我似乎已經解決了我自己的問題,但沒有按照我的預期。我使用界面設計器在XIB中創建UIDatePickerUITableViewCell。奇思妙想,我採取了刪除和編程創建它。它完美的作品!

我對它所做的唯一改變就是我上面所說的 - 所有其他代碼保持不變,我只是將以編程方式創建的UIDatePicker連接到刪除後留下的相同方法和操作一。

爲了記錄,我還在界面設計器中創建了UIViewController中的另一個UIDatePicker,並再次複製並粘貼了代碼。它也工作得很好。這似乎確實與它被放置在一個UITableViewCell ......奇怪的東西有關。

我想知道這可能是一個錯誤?無論如何,如果你遇到同樣的問題,試試看。