DZNEmptyDataSet icon indicating copy to clipboard operation
DZNEmptyDataSet copied to clipboard

I found a bug, I don't know if it's a bug

Open flyOfYW opened this issue 6 years ago • 2 comments

之前占位都是自己写,但是最近在交流群,听人说有个比较好的框架,DZNEmptyDataSet, 今天有时间跪读了大神你的这个框架的源码,发现有个小问题 // UITableView support if ([self isKindOfClass:[UITableView class]]) {

    UITableView *tableView = (UITableView *)self;
    id <UITableViewDataSource> dataSource = tableView.dataSource;
    
    NSInteger sections = 1;
    
    if (dataSource && [dataSource respondsToSelector:@selector(numberOfSectionsInTableView:)]) {
        sections = [dataSource numberOfSectionsInTableView:tableView];
    }
    
    if (dataSource && [dataSource respondsToSelector:@selector(tableView:numberOfRowsInSection:)]) {
        for (NSInteger section = 0; section < sections; section++) {
            items += [dataSource tableView:tableView numberOfRowsInSection:section];
        }
    }
}

这个判断看起来没有什么大问题,一般情况是不会出现问题的,但是有种情况下,这样判断是错误的,这种情况:假设是这个UITableView分组的时候,而cell的个数,通过点击组头来控制是否展示cell,所以当只有组头的时候(也就是没有点击组头展开cell的情况下),这样cell个数不就是0了吗,那么占位图和组头不就同时出现了吗,不知道小弟我说的是否合理,请见谅小弟我的冒犯之处。 @dzenbot

flyOfYW avatar Sep 22 '18 08:09 flyOfYW

应该不是bug。

首先先看调用的地方:

- (void)dzn_reloadEmptyDataSet
{
    if (![self dzn_canDisplay]) {
        return;
    }
    
    if (([self dzn_shouldDisplay] && [self dzn_itemsCount] == 0) || [self dzn_shouldBeForcedToDisplay] {
    }
}

调用dzn_itemsCount前,会先检查-(void)emptyDataSetShouldDisplay{}这个代理的返回值,所以可以自己判断section的数量来决定显不显示DZNEmptyDataSet,即使折叠了,section的数量还是大于0的。

#pragma mark DZNEmptyDataSetDelegate

- (BOOL)emptyDataSetShouldDisplay:(UIScrollView *)scrollView
{
    return YES or NO;
}

lensoso avatar Sep 22 '18 08:09 lensoso

ok

flyOfYW avatar Sep 22 '18 08:09 flyOfYW