在dispatch_async中进行网络调用似乎不起作用?

时间:2016-01-13 06:38:08

标签: ios swift grand-central-dispatch flurry flurry-analytics

dispatch_async内进行网络通话有什么问题吗?

下面的代码放置在dispatch_async内部时不会将任何内容记录到Flurry,但在放置在函数外部时会起作用。

Flurry文档中没有任何内容表明dispatch_async会导致问题。

有人可以解释下面的代码有什么问题吗?

func logFlurry(eventName: String, var userData: NSMutableDictionary?) {
    dispatch_async(dispatch_get_main_queue()) {
        if (userData == nil) {
            userData = NSMutableDictionary()
        }
        userData!.setObject(USER.getUsername(), forKey: "Username")
        Flurry.logEvent(eventName, withParameters: userData! as [NSObject : AnyObject])
    }
}

2 个答案:

答案 0 :(得分:1)

尝试设置块外的传递字典的userData数据,

if (userData == nil) {
    userData = NSMutableDictionary()
}

userData!.setObject(USER.getUsername(), forKey: "Username")

dispatch_async(dispatch_get_main_queue()) {
    Flurry.logEvent(eventName, withParameters: userData! as [NSObject : AnyObject])
}

答案 1 :(得分:0)

网络调用通常放在后台线程上,因为(特别是如果你发出的响应很大的网络请求)否则网络调用将阻止UI(运行于主线程)