【iOS】—— 知乎日报第一周遇到的问题

1.线程问题:

在使用网络请求请求数据时,因为使用的是MVC模式,导致在请求到的数据没有返回的时候程序就已经开始了UI布局,导致UI中有需要用到获取到数据的地方程序崩溃,这里我将UI布局最终写在网络请求的Block回调中,解决这个问题,但是因为线程原因,它没有回到主线程再进行UI布局又导致程序崩溃,这时候需要将程序回到主线程然后再进行UI的布局

//获取网络请求
- (void)GetNetworkModel {
    
    [[NetworkModel shareNetworkModel] NetworkModelData:^(NetworkJSONModel * _Nullable networkModel) {
        self.monthString = [networkModel.date copy];
        
        //回到主线程
        dispatch_async(dispatch_get_main_queue(), ^{
            [self addUI];
        });
        
    } andError:^(NSError * _Nullable error) {
        NSLog(@"请求失败!");
    }];
}

//布局UI
- (void)addUI {
    
    self.addKnowView = [[KnowView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)];
    self.addKnowView.dayLabel.text = [self.monthString substringWithRange:NSMakeRange(6, 2)];
    NSString *month = [self.monthString substringWithRange:NSMakeRange(4, 2)];
    self.addKnowView.monthLabel.text = [self changMonth:month];
    [self.view addSubview:self.addKnowView];
    
}

2.cell中图片下载并加载:

具体的下载和使用参考:
iOS-SDWebImage的使用和实现原理

3.下拉数组刷新问题:

我是使用当前显示屏幕高度跟整个屏幕的高度进行比较,如果当前显示的屏幕高度小于你设定的刷新时的屏幕显示高度,就通知viewController进行刷新,同时获取网络请求的数据。我自己百度的还有两种方法,一种的是kvo监听来判断距离另一种是使用refresh库

4. Masonry中mas_equalTo和equalTo的区别:

equalTo的类型为id,里面不能直接填数字,如果非要填,需要这么填:

make.width.equalTo(@100);

mas_equalTo是对参数进行转化后得到匹配的参数:

make.width.mas_equalTo(100);

所以,综上可以看出,mas_equalTo和equalTo实际上是一样的,只是各自类型不同。

5.cell上的头标题设置:

改变UITableView的headerView、footerView背景颜色

//与下面一同作用才能设置头标题
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
    header.contentView.backgroundColor= [UIColor clearColor];
    header.textLabel.text = @“sdsdsd”;
    [header.textLabel setFont:[UIFont systemFontOfSize:20]];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return @"111"; //该内容不会被显示,但是要一同使用
}

【iOS】—— 知乎日报第一周遇到的问题_第1张图片

你可能感兴趣的:(iOS笔记,objective-c)