APP主页
前言
电商APP基本都有购物车页面,购物车的数据会受用户在其他页面的操作的影响。比如说:用户不仅可以在购物车VC里进行商品的添加与删除操作,也可以在商城的商品列表里操作、还可以在商品详情页以及商品搜索页操作。而这些操作都会导致购物车数据的变动。那我们应该在什么时候刷新购物车呢?
注:此APP中购物车的数据全部来自后台,没有本地购物车数据库,刷新购物车必须从后台获取数据。
参考方案
方案一:在购物车VC的viewWillAppear:
方法里执行刷新
虽然可行,但是用户并未进行任何增删操作也需要刷新购物车?
方案二:每次增删操作都通知购物车刷新
也可行,但是用户都没有在购物车页面,刷不刷新对他也没影响啊。
方案三:将方案一与方案二结合
用户进行商品增删操作时,发通知给购物车,购物车将属性shouldUpdate
标为YES
,当进入购物车页面时,根据shouldUpdate
的值决定是否刷新:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// 是否正在更新
static BOOL isUpdating = NO;
// 需要更新,并且没在更新
if (self.shouldUpdate && !isUpdating) {
// 更新期间展示loading,禁止用户交互
[CQHud showLoadingOnView:self.tableView];
isUpdating = YES;
// 更新
[self loadListDataWithPage:1 success:^{
isUpdating = NO;
self.shouldUpdate = NO;
[CQHud removeOnView:self.tableView];
} failure:^{
isUpdating = NO;
self.shouldUpdate = YES;
[CQHud removeOnView:self.tableView];
}];
}
}
方案四:用单例
多对一的情况下通知和单例都是可行的选择。使用单例的话就是直接对单例进行操作,如[CQShopcartManager sharedInstance].shouldUpdate = YES
,然后在购物车的viewWillAppear:
里根据单例的值决定是否刷新,刷新后将单例的值改回NO
。
淘宝的做法
我测试了一下淘宝APP。
先添加一个商品,再关掉网络,然后切换到购物车主页,toast提示网络崩了。为什么会出现提示?因为它想去后台拿数据,奈何没网。
如果我没添加商品,关掉网络切换到购物车主页,此时并没有toast提示。说明它没有去后台拿数据。
因此可判断淘宝APP也是只有进行商品增删操作后才会刷新购物车。
总结
先标记,需要的时候再刷新,相对于每次进入页面都刷新或者每次操作都发通知直接刷新,这种做法在满足实时更新的前提下节省了用户的流量并且提高了用户体验度。
网友评论