2016-05-08 99 views
0

我正在使用基於令牌的身份驗證的Swift項目。當應用程序從後臺恢復時,AppDelegate函數applicationWillEnterForeground()會執行檢查以確保內存中的令牌未過期(到期日期存儲在NSUserDefaultstoken_expiry變量中)。如果它已經過期,它會調用一個函數來更新並獲得一個新的。Swift等待現有的異步操作在開始新異步操作之前完成

我面臨的問題是,雖然異步功能正在等待服務器回覆一個新的令牌,應用程序中的用戶可以做一些需要授權的事情。如果發生這種情況,由於尚未獲取新令牌,應用程序將使用舊令牌值查詢服務器,並且不會檢索數據。

有沒有一種方法可以確保異步函數更新令牌已完成,然後再執行其他操作?

+0

您可以確保使用異步功能的順序。例如使用完成處理程序,期貨或承諾,NSOperations以及可能更多的技術。關於如何實現這一點,有很多答案。但我也會考慮改變你的設計:一種方法不會_prefetch_令牌,而是讓用戶執行一個「正常」的請求。如果沒有令牌或令牌已過期,則此請求將失敗,並顯示一定的錯誤。然後,只需執行以下操作:通知用戶需要再次授權,獲取令牌,然後重新應用請求。 – CouchDeveloper

回答

0

建立一個NSNotifications系統,在認證有效/無效時通知你的GUI。

在您的GUI中,在發生通知時啓用或禁用需要身份驗證的用戶控件。你如何做到這一點將取決於你的GUI設計:隱藏控制,灰色控制和活動指標是一些選擇。

當您檢查身份驗證時,根據需要發送這些通知。