iOS 新闻频道管理逻辑处理

本文档详细介绍了在APP中如何处理频道管理的逻辑,特别是当用户编辑过频道顺序后,如何确保再次打开APP时按照之前的顺序展示,并显示最新的频道信息。主要涉及到根据用户操作顺序调整新请求的频道数据,以及在本地缓存中更新和新增频道数据的步骤。
摘要由CSDN通过智能技术生成

效果图

请添加图片描述

需求

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值