2016-07-28 5 views
0

Ich habe nach einer Lösung gesucht und bin irgendwie verwirrt. Ich muss regelmäßig eine Aufgabe in allen meinen UIViewControllern ausführen. Im Grunde möchte ich den Inhalt meiner Datenbank alle 10 Sekunden überprüfen, um zu sehen, ob sich eine Variable von 0 auf 1 geändert hat. Ich habe über NSTimer und Dispatch_time gelesen, war aber nicht sicher, ob sie weiterlaufen, wenn ich von einer Ansicht zur nächsten gehe Staubbeutel. Wie kann ich das erreichen?Wie man eine Aufgabe regelmäßig in allen UIViews (Swift-Sprache) ausführt?

Der zweite Teil meiner Frage ist, wie kann ich diese Aufgabe an den Hintergrund Thread übergeben? Sagen Sie, wenn der Benutzer sein/ihr Telefon sperrt Ich möchte, dass die App die Datenbank weiterhin überprüft, bis sich die Variable von 0 auf 1 ändert.

Ich bin neu in der App-Programmierung und iOS-Architektur. Wenn es etwas gibt, das ich lesen kann, um mir bei dieser Aufgabe zu helfen, bitte schlagen Sie vor.

Vielen Dank im Voraus.

Antwort

1

Haben Sie darüber nachgedacht, eine Thread zu betreiben?

Sicher Leute werden sagen, Anfänger sollten nie Threads berühren, da nicht vorsichtig sein könnte zu sehr unvorhersehbaren Bugs usw. Die Sache ist manchmal müssen Sie wirklich von ihnen Gebrauch machen, und Ihr Bedarf ist für Threads geeignet.

Threads laufen im Hintergrund Ihres Programms, getrennt vom Rest Ihres Codes und dem Rest der Threads. Das heißt, Threads warten nicht auf etwas anderes, nur wenn du sie darum bittest.

Erfahren Sie mehr über Threads in Swift hier: https://thatthinginswift.com/background-threads/

+0

Da OPs von praktisch jedem Punkt in seiner App aus über diese Änderung informiert sein können, lohnt es sich auch, etwas über Singletons und Delegierte/Benachrichtigungen zu lesen. – Losiowaty

+0

Nicht wirklich. Er sagte bereits, dass er eine Aufgabe periodisch wie alle 10 Sekunden ausführen muss. Dies würde es nicht erlauben, dass sein Aufgabenprüfcode * zu viel * mit anderen Funktionalitäten interferiert. So bleibt Gewinde der beste Schuss –

+0

Ja, du hast recht. Was ich meinte, ist, dass es eine gute Idee wäre, ein Singleton zu haben, um den Thread zu verwalten und alle interessierten Parteien über die Änderung zu informieren.Sie müssen nicht aktiv fragen, ob die Änderung stattgefunden hat, wenn Sie darüber informiert werden können;) – Losiowaty

0

Diese für den mobilen Einsatz nicht der richtige Ansatz ist, um die Abfrage von Änderung der Datenbankeinträge. Irgendwo von Ihnen Code werden diese Datenbankeinträge aktualisiert. Sie können den Post NSNotification mit NSNotificationCenter verwenden, von wo aus Ihre Datenbankeinträge aktualisiert werden. Alle Ansichten, die sich für das Abhören registriert haben, werden über diese Änderungen benachrichtigt.

//for listening for notification 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@SELECTOR(methodWhichWillBeInvoked) name:@"yourname" object:nil]; 


//for posting notification 
[[NSNotificationCenter defaultCenter] postNotifcationName:@"yourname" object:nil]; 

Jedes Mal, wenn Sie sicher sind, dass Sie nicht für die NSNotification beobachten müssen, sollten Sie in folgenden Weise abmelden.

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

für NSNotification Entsendung check here

Beobachtung für NSNotification check here

für check here

Eine andere Sache, ios app abzumelden im Hintergrund laufen kann, können Sie schweigen Audio zu spielen bekommen vorgeschlagen Sie App läuft, aber Sie App Appstore bei einem solchen Verhalten abgelehnt werden.

hoffe, dass sie dir helfen.

+0

Fügen Sie Informationen zum Abbestellen des Empfangs von Benachrichtigungen und wann dies zu tun ist hinzu, da dies zu unerwartetem Verhalten und Speicherlecks führen kann. – Losiowaty

+0

Ich habe irgendwo gelesen, dass ich das Apple-Benachrichtigungszentrum dafür abonnieren muss. Ist das wahr? –

+0

Informationen hinzugefügt @LOSIOWATY, lassen Sie mich wissen, was ist Apple Benachrichtigungszentrale? bitte füge eine Referenz hinzu (zu ali m) –