- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Swift 编写一个应用程序,我在其中实现了一个 singleton class通过 Moscapsule 处理数据检索.
当我通知我的应用有新数据时 content-available: 1
正确的函数会在我目前只做的地方被调用
let mqtt = MQTTManager.Instance
completionHandler(UIBackgroundFetchResult.NewData)
管理器在 init 上创建连接,然后 onMessageCallback 使用新数据。
如果应用程序最近运行过,处于后台并且单例类保持网络连接,则此方法有效。但这不是正确的方法。
我是 iOS 和 Swift 开发的新手,我怎样才能等待最长的时间?当数据进来时,我可以发送 UIBackgroundFetchResult.NewData,如果没有数据,我可以发送 UIBackgroundFetchResult.Failed。
我的第一个想法是编写一个循环,检查该类的变量是否每 500 毫秒收到一条新消息,如果是,则调用 completionHandler。但这对我来说不合适,那么,你会怎么做?
编辑 2015/02/18:这是我的 AppDelegate.swift 中的代码,一旦应用程序收到静默推送通知就会执行该代码:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
log.debug("Got remote notification: \(userInfo)")
log.debug("Setting up MQTT client...")
let mqtt = MQTTManager.sharedInstance
completionHandler(UIBackgroundFetchResult.NewData)
}
最佳答案
您可以在该类中定义一个属性来保存完成处理程序(使其成为可选的):
var completionHandler: ((UIBackgroundFetchResult) -> Void)?
然后你的 didReceiveRemoteNotification
会做类似的事情:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
log.debug("Got remote notification: \(userInfo)")
log.debug("Setting up MQTT client...")
let mqtt = MQTTManager.sharedInstance
mqtt.completionHandler = completionHandler
}
然后,onMessageCallback
可以执行如下操作:
self.completionHandler?(.NewData) // or .NoData or whatever
self.completionHandler = nil
我必须承认这感觉不对。感觉init
函数不仅仅是实例化单例,还要启动连接,发出请求,你有什么。您还没有与我们分享,所以很难说,但感觉不正确。 init
实际上应该只创建单例。然后,让我们对其进行配置(例如指定 completionHandler
),然后它才会调用单独的 connect
函数。
关于ios - 如何从 Singleton 类调用 completionHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569031/
我是一名优秀的程序员,十分优秀!