效果图
需求
如果编辑频道顺序,则再次打开APP,需要按照之前编辑过得顺序展示,
并且展示最新的频道信息(如:某个频道名有更新,需要使用最新的频道名)
频道管理逻辑
没有编辑过频道
直接使用服务端返回的频道数据
直接赋值,代码略
编辑过频道
使用新请求到的频道数据,但是需要按照之前编辑过的顺序,如果有新添加的频道,添加到最后面展示
代码
+ (void)handleMainpageColumnWithNodeArray:(NSArray *)nodeArray
{
/*nodeArray 是请求到的总的频道数组,这里使用总的数组,因为
不管是我的频道中的频道数据,还是 更多 中的频道数据,都是从总的频道
数组中获取的
*/
/*
为了按照用户操作的顺序展示
如果切换过顺序,并且上次请求到的数据和新请求到的数据一样,则使用新的数据
*/
///将新请求到的频道数据,按照本地的顺序调整
NSMutableArray *tmpNewRequestedChannelArray = [NSMutableArray array];
[nodeArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
__block BOOL hasInLastChanenelArray = NO;
[[TPUserDefault instance].lastChanneldatList enumerateObjectsUsingBlock:^(id _Nonnull obj2, NSUInteger idx2, BOOL * _Nonnull stop2) {
if ([obj[@"nodeId"] integerValue] == [obj2[@"nodeId"] integerValue]) {
hasInLastChanenelArray = YES;
*stop2 = YES;
}
}];
if (!hasInLastChanenelArray) {
[tmpNewRequestedChannelArray addObject:obj];
}
}];
// 存放新请求到的,并且本地缓存的我的频道已有的频道(和已缓存的频道nodeid 相同,获取到频道最新的信息,如频道名等)
NSMutableArray *tmpMyChannelArray = [NSMutableArray array];
[[TPUserDefault instance].defaultNodeList enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
[nodeArray enumerateObjectsUsingBlock:^(NSDictionary *obj2, NSUInteger idx2, BOOL * _Nonnull stop2) {
if ([obj2[@"nodeId"] integerValue] == [obj[@"nodeId"] integerValue]) {
[tmpMyChannelArray addObject:obj2];
*stop2 = YES;
}
}];
}];
/// 将新添加的频道添加到我的栏目最后面
[tmpMyChannelArray addObjectsFromArray:tmpNewRequestedChannelArray];
//使用最新请求到的数据替换缓存的数据
[TPUserDefault instance].defaultNodeList = tmpMyChannelArray.copy;
NSMutableArray *tmpUserMoreChannelArray = [NSMutableArray array];
[[TPUserDefault instance].mainPageMoreColumn enumerateObjectsUsingBlock:^(NSDictionary *objOutside, NSUInteger idxOutside, BOOL * _Nonnull stopOutside) {
[nodeArray enumerateObjectsUsingBlock:^(NSDictionary *objInside, NSUInteger idxInside, BOOL * _Nonnull stopInside) {
if ([objOutside[@"nodeId"] integerValue] == [objInside[@"nodeId"] integerValue]) {
[tmpUserMoreChannelArray addObject:objInside];
*stopInside = YES;
}
}];
}];
[TPUserDefault instance].mainPageMoreColumn = tmpUserMoreChannelArray;
}