iOS 新闻频道管理逻辑处理

效果图

请添加图片描述

需求

如果编辑频道顺序,则再次打开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;

猜你喜欢

转载自blog.csdn.net/LIUXIAOXIAOBO/article/details/121706369
今日推荐