2017-08-09 208 views
0

用戶向其包中添加項目。只要將商品添加到包中,我們就會進行網絡通話以確保該商品仍然可用。網絡通話需要幾秒鐘才能在後臺完成。獲取topVC或Visible VC並檢查特定VC是否在堆棧中

當一個項目被添加到購物車時,它被存儲在一個可以從應用程序的任何地方訪問的單例中。就像這樣:

static let shared = Cart()  
var products = [Product]() 

當網絡調用返回和產品是不可用的,我們從單中刪除。如果購物車VC在網絡呼叫期間打開,則會導致問題,因爲表視圖需要重新加載。出於這個原因,我們需要檢查可見的VC是否是購物車VC並重新加載表格視圖。我還想檢查CartVC是否在內存中並重新加載表格視圖。因爲如果購物車VC在內存中並且低於另一個VC,那麼它也將具有不良數據,並且當用戶關閉VC時,它們將看到不好的數據。我會怎麼做?

在此標記爲重複項目之前,我沒有檢查其他帖子,沒有一項效果很好。還有很多方法可以做到這一點,我想知道哪些是最快的3.

回答

0

當購物車停在堆棧中時,請使用viewWillAppear然後重新載入表格。這樣你就不會重新加載表格所需的次數。 (如果購物車處於堆疊狀態,並且有四個不同的網絡呼叫返回,則僅在其出現之前將其重新加載,而不是在隱藏時將其重新加載四次。)通常在viewWillAppear中重新加載表視圖,專門用於處理潛在的過時數據。

因爲當車出現在屏幕上的情況下,你單身,每當一個產品回來爲不可用,車可以viewWillAppear該通知登記和viewWillDisappear(或viewDidDisappear)註銷可以發送通知。通知可以觸發完整的數據重新加載,也可以包含哪些產品不可用,並讓用戶知道發生了什麼(而不是突然從購物車中消失,但沒有解釋)。

這樣,單例不需要知道任何有關購物車視圖控制器的信息,從而使其更具可重用性。

+0

爲什麼我們需要註銷通知。這有效,但我們不會在應用程序的任何位置註銷我們的通知。這真的很糟糕嗎?所有的通知都在告訴VC重新加載表格視圖 –

+0

這並不算太壞。通過註銷通知時,它不是可見的VC保持表視圖不必要的重新加載。如果你保持註冊風險投資的生命,那麼你不需要在'viewWillAppear'中重新加載表格,但是如果你有很多項目在同一時間回到無法使用的狀態,那麼你可能會看到一個看不見的表現視圖一遍又一遍地重新加載。還要確保通知中的重新調用正在主線程中發生,否則會發生奇怪的事情。 – theMikeSwan

+0

完美。謝謝。我們正在重新加載視圖反正會出現,所以問題甚至不是問題。我只是沒有意識到這一點。我們如何在viewwilldispapear上取消註冊通知? –

1

您可以使用通知來做到這一點。想象一下這個項目不再可用並且VC處於打開狀態的情況:

1 - 訂閱諸如「ItemNotAvailableNotification」之類的通知。

2 - 網絡調用返回,該項目不再可用。

3 - 發佈通知「ItemNotAvailableNotification」。

4 - 在你的VC處理通知。

此外,此方法允許您處理「CartVC」和您的「PreviousVC」中用戶導致相信該項目可用的「壞數據」。