2016-07-28 53 views
0

我一直在尋找解決方案,我有點困惑。我需要定期在我所有的UIViewControllers中運行一個任務。基本上我想檢查我的數據庫的內容說每10秒,看看一個變量是否已從0更改爲1.我讀了關於NSTimer和Dispatch_time,但我不知道如果他們繼續運行,如果我從一個視圖繼續花葯。我怎樣才能做到這一點?如何在所有UIViews(Swift語言)中定期運行任務?

我的問題的第二部分是如何將此任務傳遞給後臺線程?假設用戶鎖定了他/她的手機,我希望應用程序仍然檢查數據庫,直到變量從0變爲1.

我是新來的應用程序編程和iOS架構。如果有什麼我可以閱讀來幫助我完成這項任務,請提出建議。

在此先感謝。

回答

1

您是否考慮過運行Thread

當然人們會說,初學者不應該接觸線程,因爲不小心可能會導致非常不可預知的錯誤等。 有時你真的必須使用它們,而且你的需求適合線程。

線程在程序的後臺運行,與代碼的其餘部分以及其餘線程分離。這意味着線程不會等待任何其他事情,只有當你要求他們。

詳細瞭解Threads在這裏斯威夫特:https://thatthinginswift.com/background-threads/

+0

對於OP需要能夠從他應用程序的任何點了解這種變化,讀取單身人士和代表/通知可能也是值得的。 – Losiowaty

+0

不是。他已經表示他需要每10秒定期執行一次任務。這樣做不會允許他的任務檢查代碼與其他任何功能干涉*太多*。所以線程仍然是最好的拍攝 –

+0

是的,你是對的。我的意思是,有一個單身人士來管理線程,並通知所有感興趣的人關於這個變化將是一個好主意。沒有必要主動詢問是否發生了變化,當你可以通知它時;) – Losiowaty

0

這不是爲移動應用正確的方法,以輪詢數據庫條目的變化。從你的代碼中,這個數據庫條目正在更新。您可以使用NSNotificationCenter後的NSNotification來更新數據庫條目。所有註冊聽取該通知的視圖都會收到此更改的通知。

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


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

無論您何時確定,您不需要遵守NSNotification,您應該按照以下方式取消訂閱。

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

張貼NSNotification check here

觀察的NSNotification check here

退訂check here

另一件事,iOS應用可以在後臺運行,你可能會得到建議玩無聲音頻保持你的應用程序正在運行,但你的應用程序將會被這樣的行爲拒絕。

希望他們幫助你。

+0

請添加有關從接收通知取消訂閱的信息以及何時執行該操作,因爲如果不這樣做可能會導致意外的行爲和內存泄漏。 – Losiowaty

+0

我在某處閱讀我必須爲此訂閱Apple通知中心。真的嗎? –

+0

添加了@Losiowaty信息,請讓我知道什麼是Apple通知中心?請加一些參考(給阿里米) –