0

我的應用程序是根據通過多層連接框架接收到的數據在大約5臺iPad之間進行通信並進行更新。Swift:Multipeer Connectivity + UI更新

其中一臺iPad做了以下工作:獲取當前位置並將其發送給其他同行。對等方根據收到的位置更新UI。

我發現有一個問題,當iPad需要將數據包發送給其他人時,導致其UI沒有立即更新。 UI事件一直持續到發送完數據包。由於位置不斷更新,所有這些事件不斷髮起。

我試圖把在一個線程中發送數據包:

let bgQueue = DispatchQueue(label: "hk.edu.polyu.isurf.sendqueue", qos: .utility, attributes: .concurrent) 

,然後把代碼這個bgQueue內發送數據包:

func sendPacket { 
    bgQueue.async { 
    // create packet, and send 
    } 
} 

我的位置更新的代碼將導致此:

func receiveLocation() { 
    sendPacket() 
    updateUI() 
} 

如何提高效率? UI現在基本上無法更新,嚴重「滯後」。

我試圖改變bgQueue的類型,但沒有改進。

謝謝。

回答

0

您應該確保您的UI正在主隊列上更新。

如果您嘗試更新會話didRecieve函數中的UI,則這是一個在後臺運行的函數。這意味着它內部所做的任何UI更改都需要放入主隊列的Dispatch中,以便立即更新它的更新。

DispatchQueue.main.async 
{ 
// UI updates go here 
}