iOS频道编辑生效时机处理

需求

请添加图片描述
如上图所示,我的栏目中可以拖动栏目修改排序,还可以删除频道,需改排序和删除频道需要点击完成之后才生效
而下面的添加栏目是即时生效的,即只要点击添加频道就立即生效

分析

本地有一个数据源 ,对于不即时生效的修改,不能直接修改
数据源,而我们又需要记录修改的具体内容,所以需要新创建一个临时数据源,用来保留 不即时生效的修改,
同时,添加栏目的修改是即时生效的,为了保证修改的同步,即时修改的内容需要修改本地数据源,同时还要修改临时数据源

即:即时生效的修改需要修改本地持久数据源和临时数据源,而不立即生效的只需要修改临时数据源

实现代码

初始化数据源

/// 创建和本地持久属于源相同的临时属于源
    self.tmpMyColumnArray = [TPUserDefault instance].defaultNodeList;
    self.tmpMoreColumnArray = [TPUserDefault instance].mainPageMoreColumn;

添加频道

- (NSArray *)addColumnWithNodeId:(NSString *)nodeId
{
    
    
/// 修改临时数据源
    NSMutableArray *array = [[TPUserDefault instance].defaultNodeList mutableCopy];
    [TPUserDefault instance].hasChangedMainpageChannelOrder = YES;
    [self.tmpMoreColumnArray enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
    
    
        if ([obj[@"nodeId"] integerValue] == nodeId.integerValue) {
    
    
            [self.tmpMyColumnArray addObject:obj];
            [self.tmpMoreColumnArray removeObject:obj];
        }
    }];
    
    /// 添加频道是立即生效的 修改本地持久数据源
    [[TPUserDefault instance].channldataList enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
    
    
        NSString *nodeIdInAarray = obj[@"nodeId"];
        if (nodeIdInAarray.integerValue == nodeId.integerValue) {
    
    
            
            if ([obj.allKeys containsObject:@"controller"]) {
    
    
                NSString *className = obj[@"controller"];
                if (!isBlankString(className)) {
    
    
                    Class class = NSClassFromString(className);
                    ChannelContentListController *vc = [[class alloc] init];
                    vc.nodeId = nodeIdInAarray;
                    NSMutableArray *tmpViewControllers = [NSMutableArray arrayWithArray:self.viewControllers];
                    [tmpViewControllers addObject:vc];
                    self.viewControllers = tmpViewControllers.copy;
                    [self.pageViewControllers addObject:vc];
                    [self addChildViewController:vc];
                }
            }
            [array addObject:obj];
            NSMutableArray *moreArray = [[TPUserDefault instance].mainPageMoreColumn mutableCopy];
            [moreArray removeObject:obj];
            [TPUserDefault instance].mainPageMoreColumn = moreArray.copy;
            *stop = YES;
        }
    }];
    return array.copy;
}

///调用上面的方法,立即修改本地持久数据源
        NSArray *array = [weakSelf addColumnWithNodeId:nodeId];
        [weakSelf refreshDataWhenUpdateColumnWithArray:array];

删除

//只修改临时数据源
- (void)deleteColumnWithNodeId:(NSString *)nodeId
{
    
    
    [self.tmpMyColumnArray enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
    
    
        if ([obj[@"nodeId"] integerValue] == nodeId.integerValue) {
    
    
            [self.tmpMoreColumnArray addObject:obj];
            [self.tmpMyColumnArray removeObject:obj];
        }
    }];
}

保存

//点击完成按钮

-  (void)editFinishClick
{
    
    
///使用临时数据源替换本地持久数据源
    if (![[TPUserDefault instance].defaultNodeList isEqualToArray:self.tmpMyColumnArray] ||
        [TPUserDefault instance].hasChangedMainpageChannelOrder) {
    
    
        [TPUserDefault instance].hasChangedMainpageChannelOrder = YES;
    }
    NSString *currentNodeId = [self currentNodeId];
    [TPUserDefault instance].defaultNodeList = self.tmpMyColumnArray.copy;
    [TPUserDefault instance].mainPageMoreColumn = self.tmpMoreColumnArray.copy;
    [self refreshWithCurrentNodeId:currentNodeId];
}

猜你喜欢

转载自blog.csdn.net/LIUXIAOXIAOBO/article/details/121750962