作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不清楚如何正确使用它,但见过其他人在做这种事情:
func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> Void) {
manager.sharedInstance.backgroundCompletionHandler = completionHandler
}
completionHandler
是
partial apply forwarder for reabstraction thunk helper...
manager
本质上是(尽管是单例):
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.ourcompany.app")
let manager = Alamofire.Manager(configuration: configuration)
Warning: Application delegate received call to -application:handleEventsForBackgroundURLSession:completionHandler: but the completion handler was never called.
backgroundCompletionHandler
是
nil
.
didSet
内部添加和打印时在 backgroundCompletionHandler
在 Manager
类,消息被记录之前 警告。 sessionDidFinishEventsForBackgroundURLSession
在 delegate
里面Manager
类,消息打印之后 警告。 sessionDidFinishEventsForBackgroundURLSession
时并在调用 backgroundCompletionHandler
之前在其中打印, 消息被打印 之后 警告。 UIBackgroundModes
完全按照@Nick 的描述设置,并调用
completionHandler()
直接在
application:handleEventsForBackgroundURLSession:completionHandler:
内部不显示警告。
Alamofire.Manager
周围有一个包装器这不会直接暴露它。其实现的相关部分如下所示:
private var manager: Manager
public var backgroundCompletionHandler: (() -> Void)? {
get {
return manager.backgroundCompletionHandler
}
set {
manager.backgroundCompletionHandler = backgroundCompletionHandler
}
}
AppDelegate
中设置完成处理程序执行该代码路径。
func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> Void) {
myManager.sharedInstance.backgroundCompletionHandler = completionHandler
}
Alamofire.Manager
的实例并直接访问它不会产生警告:
public var manager: Manager
// public var backgroundCompletionHandler: (() -> Void)? {
// get {
// return manager.backgroundCompletionHandler
// }
// set {
// manager.backgroundCompletionHandler = backgroundCompletionHandler
// }
// }
AppDelegate
:
func application(application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: () -> Void) {
myManager.sharedInstance.manager.backgroundCompletionHandler = completionHandler
}
最佳答案
看起来你所做的一切都是正确的。我有一个示例应用程序,它完全按照您所描述的方式工作,并且不会引发您看到的警告。我猜你在某个地方仍然有一些小错误。这里有一些想法可以尝试:
didSet
backgroundSessionHandler
上的日志声明在 Manager
类临时验证它正在设置sessionDidFinishEventsForBackgroundURLSession
验证它是否按预期被调用 sessionDidFinishEventsForBackgroundURLSession
在委托(delegate)上并手动调用 backgroundSessionHandler
backgroundCompletionHandler
至
newValue
.否则,您永远不会正确地将其设置为新值。看到这个
thread了解更多信息。
关于nsurlsession - 在 Alamofire 中使用 backgroundCompletionHandler 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32766683/
我不清楚如何正确使用它,但见过其他人在做这种事情: func application(application: UIApplication, handleEventsForBackgroundURLS
我是一名优秀的程序员,十分优秀!