如何在所有UIViews(Swift语言)中定期运行任务?

时间:2016-07-28 21:51:30

标签: ios swift uiview

我一直在寻找解决方案,我有点困惑。我需要在所有的UIViewControllers中定期运行一个任务。基本上我想检查我的数据库的内容,每隔10秒检查一次变量是否从0变为1.我读了NSTimer和Dispatch_time,但我不确定如果我从一个变量中继续运行查看花药。我怎样才能做到这一点?

我的问题的第二部分是如何将此任务传递给后台线程?假如用户锁定他/她的手机我希望应用仍然检查数据库UNTIL变量从0变为1.

我是应用编程和iOS架构的新手。如果有任何我可以阅读以帮助我完成此任务,请建议。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您是否考虑过运行Threads

当然人们会说初学者不应该接触线程,因为不小心会导致非常不可预测的错误等。 事情有时你真的必须使用它们,你的需要适合线程。

线程在程序的后台运行,与其余代码和其余线程分开。这意味着线程不会等待任何其他事情,只要你要求它们。

在此处详细了解Swift中的{{1}}:https://thatthinginswift.com/background-threads/

答案 1 :(得分:0)

这不是移动应用程序的正确方法,用于轮询数据库条目的更改。在您的代码的某处,此数据库条目正在更新。您可以使用更新数据库条目的NSNotification来发布NSNotificationCenter。注册收听该通知的所有观看者都将收到有关此更改的通知。

//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应用程序可以在后台运行,你可能会建议播放无声音频以保持应用程序运行,但你的应用程序将被appstore拒绝这样的行为。

希望他们帮助你。