[問題] dispatch_async callback not work

看板MacDev作者 (valda)時間9年前 (2014/09/23 16:21), 編輯推噓3(309)
留言12則, 2人參與, 最新討論串1/1
在跟FB Graph API要資料時 xcode提醒我,這行為佔用main thread太久的時間 所以我把這段程式碼丟到dispatch_async中執行 但卻完全沒反應 請問有得解嗎? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [FBRequestConnection startWithGraphPath:@"/me/taggable_friends" parameters:nil HTTPMethod:@"GET" completionHandler:^( FBRequestConnection *connection, id result, NSError *error ) { /* handle the result */ NSLog(@"%@",result); [self insertFriendInfoToContainer:[result objectForKey:@"data"]]; }]; }); 不管如何,都無法執行到nslog那行 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.186.235 ※ 文章網址: http://www.ptt.cc/bbs/MacDev/M.1411460461.A.35D.html

09/24 09:00, , 1F
FB最厲害的就是這個
09/24 09:00, 1F

09/30 23:42, , 2F
這是FB的bug(?), 如果你active session跑的thread跟
09/30 23:42, 2F

09/30 23:42, , 3F
startWithGraphPath跑的不一樣, callback就不會發生
09/30 23:42, 3F

09/30 23:43, , 4F
它會認定你的session是空的就直接丟掉
09/30 23:43, 4F

09/30 23:48, , 5F
修正一下,我說錯了,我查了一下跟run loop有關
09/30 23:48, 5F

09/30 23:49, , 6F
這支底層用的是NSURLConnection,如果不是跑在主線
09/30 23:49, 6F

09/30 23:50, , 7F
需要自己設定run loop讓它有辦法繼續下去
09/30 23:50, 7F

09/30 23:51, , 8F
我是參考http://ppt.cc/PGsX
09/30 23:51, 8F

09/30 23:59, , 9F
但是那個最佳解我覺得不是正解
09/30 23:59, 9F

10/01 00:00, , 10F
他丟到main thread跟直接寫是一樣的
10/01 00:00, 10F

10/01 00:00, , 11F
trace FB這隻, 它原本就會把request丟到背景跑
10/01 00:00, 11F

10/01 00:01, , 12F
所以你可能要確定一下是不是這隻在吃資源, 還是其它原因
10/01 00:01, 12F
文章代碼(AID): #1K8IrjDT (MacDev)