2016-04-26 19 views
1

Ich habe eine App, die Ihnen die Möglichkeit bietet, eine tägliche Erinnerung zu erhalten, um eine Aufgabe abzuschließen. Um es mit meinen Beta-Benutzern auf TestFlight zu testen, habe ich einen Dummy UIViewController eingerichtet und einen Schalter darin platziert, um Erinnerungen ein- und auszuschalten und eine UIDatePicker (nur Zeitmodus), um die Zeit einzustellen. Wenn Sie die Ansicht zum ersten Mal laden, liest sie die vorhandene UILocalNotification und zeigt die aktuelle eingestellte Zeit auf der UIDatePicker. Sie können die Benachrichtigungszeit aktivieren/deaktivieren und ändern. Klappt wunderbar.UIDatePicker reagiert nicht auf setDate

Aber jetzt bin ich fertig testen es mit meinem TestFlight Benutzer und ich verschiebe die Funktionalität auf einen neuen Bildschirm. Also habe ich das Ganze von Grund auf neu aufgebaut, nur dass ich den Code aus dem alten Test View Controller auf den neuen Code kopiert und eingefügt habe. Sie sind also absolut identisch - fast.

Der einzige Unterschied ist, dass der neue in einem anstelle von UIViewController ganz von selbst platziert wurde - auf diese Weise passt es gut mit den übrigen Einstellungen der App.

Am neuen Standort wird der Schaltzustand richtig eingestellt, abhängig davon, ob der Benutzer Erinnerungen aktiviert hat oder nicht, und ich kann sie verwenden, um sie zu aktivieren/deaktivieren. Ich bin auch in der Lage, die Erinnerungszeit zu einer neuen Zeit zu ändern. Klappt wunderbar. Wenn ich jedoch den neuen Standort lade, zeigt die UIDatePicker die aktuelle Zeit anstelle der Zeit, die in UILocalNotification vorher festgelegt wurde. Ich kann es nicht erklären. Wie gesagt, der Code wurde kopiert und vom alten auf den neuen Ort eingefügt. Das Alte funktioniert immer noch. Das Neue nicht. Unten ist der Code in Frage.

Ich kann nur annehmen, dass es etwas damit zu tun hat, innerhalb einer UITableViewCell zu sein, da das der einzige Unterschied ist, aber ich kann nicht ergründen, warum in der Welt das wichtig wäre.

Edit: Ich habe High und Low für eine Lösung gesucht, aber habe keine gefunden. Es scheint, dass die Verwendung von setDate einfach keinen Effekt hat. Ich habe alle meine Variablen gedruckt, um zu sehen, was sie zurückgeben, und alles ist korrekt. Es ist fast so, als ob etwas daran gehindert wird, auf UIDatePicker auf setDate zu reagieren. Ich kann nirgendwo sonst einen Artikel finden, der das anspricht. Ich hoffe wirklich, dass jemand da draußen schon einmal darauf gestoßen ist.

Danke für jede Hilfe !!

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) 


     } 

    } 

Antwort

0

So scheint ich das auf eigene Faust gelöst zu haben, aber nicht so, wie ich es erwartet hatte. Ich habe die UIDatePicker in einer UITableViewCell in einem XIB mit dem Interface Designer erstellt. Aus Laune und einem Wunder habe ich das Programm gelöscht und programmgesteuert erstellt. Es funktioniert perfekt !!

Die einzige Änderung, die ich daran vorgenommen habe, ist, was ich oben gesagt habe - alle anderen Code blieb gleich, ich habe nur die programmgesteuert UIDatePicker mit den gleichen Methoden und Aktionen verbunden, die von den gelöschten zurückgelassen wurden ein.

Für den Datensatz, ich auch neu erstellt, in der Schnittstelle Designer, eine andere UIDatePicker innerhalb einer UIViewController und erneut kopiert und eingefügt den Code. Es hat auch gut funktioniert. Das scheint wirklich etwas damit zu tun zu haben, dass es innerhalb eines UITableViewCell platziert wird ... Seltsam.

Ich frage mich, ob das ein Fehler sein könnte? In jedem Fall, wenn Sie das gleiche Problem haben, versuchen Sie es.