效果图
需求
如果编辑频道顺序,则再次打开APP,需要按照之前编辑过得顺序展示,
并且展示最新的频道信息(如:某个频道名有更新,需要使用最新的频道名)
频道管理逻辑
没有编辑过频道
直接使用服务端返回的频道数据
直接赋值,代码略
编辑过频道
使用新请求到的频道数据,但是需要按照之前编辑过的顺序,如果有新添加的频道,添加到最后面展示
代码
/// 注意:tempArray 是新请求到的频道数组
/*
为了按照用户操作的顺序展示
如果切换过顺序,并且上次请求到的数据和新请求到的数据一样,则使用新的数据
*/
///存放新请求到的频道,添加到最后面
NSMutableArray *tmpNewRequestedChannelArray = [NSMutableArray array];
[tempArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
__block BOOL hasInLastChanenelArray = NO;
//lastChannelList 是我的栏目中展示的频道
[[TPUserDefault instance].lastChannelList 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].channldataList enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
[tempArray 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].channldataList = tmpMyChannelArray.copy;
// 存放新请求到的, 并且本地缓存的更多频道已有的频道 (和已缓存的更多频道中的nodeid 相同, 更新频道信息,如频道名等)
NSMutableArray *tmpMoreChannelArray = [NSMutableArray array];
/// moreChannelList 是更多栏目中的频道数组
[[TPUserDefault instance].moreChannelList enumerateObjectsUsingBlock:^(NSDictionary *obj1, NSUInteger idx1, BOOL * _Nonnull stop1) {
[tempArray enumerateObjectsUsingBlock:^(NSDictionary *obj2, NSUInteger idx2, BOOL * _Nonnull stop2) {
if ([obj2[@"nodeId"] integerValue] == [obj1[@"nodeId"] integerValue]) {
[tmpMoreChannelArray addObject:obj2];
}
}];
}];
///使用最新请求到的数据替换缓存的更多栏目
[TPUserDefault instance].moreChannelList = tmpMoreChannelArray.copy;