获取topVC或Visible VC并检查特定VC是否在堆栈中

时间:2017-08-09 16:49:52

标签: ios swift swift3

用户将物品添加到行李中。一旦将项目添加到包中,我们进行网络呼叫以确保该项目仍然可用。网络呼叫需要几秒钟才能在后台完成。

将商品添加到购物车时,它会存储在可以从应用中的任何位置访问的单件中。像这样:

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

当网络呼叫返回且产品不可用时,我们将其从单例中删除。如果在网络调用期间打开了购物车VC,则会导致问题,因为需要重新加载表视图。因此,我们需要检查可见的VC是否为购物车VC并重新加载表视图。我还想检查CartVC是否在内存中并重新加载表视图。因为如果购物车VC在内存中并且在另一个VC下面,那么它也将具有不良数据,并且当用户在顶部关闭VC时,他们将看到坏数据。我该怎么做?

在此之前被标记为重复,我确实检查了其他帖子,但没有一个能够很好地工作。还有很多方法可以做到这一点,我想知道swift 3中最好的方法。

2 个答案:

答案 0 :(得分:1)

您可以使用通知执行此操作。想象一下,该项目不再可用且VC已打开的情况:

1 - 订阅“ItemNotAvailableNotification”之类的通知。

2 - 网络通话已退回,且该项目不再可用。

3 - 发布通知“ItemNotAvailableNotification”。

4 - 在VC中处理通知。

此方法还允许您处理“CartVC”中的“错误数据”以及用户认为该项目可用的“PreviousVC”。

答案 1 :(得分:0)

当购物车在堆栈中停机时,请使用viewWillAppear然后重新加载表格。这样,您不会重新加载表所需的次数。 (如果购物车在堆栈中,并且四个不同的网络调用返回,您只需在表出现之前重新加载表,而不是在隐藏时重新加载四次。)表视图通常在viewWillAppear中重新加载,专门用于处理陈旧的数据。

对于购物车在屏幕上的情况,您的单身人士可以在产品无法返回时发送通知,购物车可以在viewWillAppear注册该通知并在viewWillDisappear取消注册(或{ {1}})。通知可以触发数据的完全重新加载,也可以包括哪些产品不可用,并让用户知道发生了什么(而不是突然从购物车中消失而没有任何解释)。

通过这种方式,单身人士不需要了解有关购物车视图控制器的任何信息,从而可以更加重复使用。