0%

开发遇到的问题汇总

开发遇到问题总结

后台线程更新UI问题

  • 场景描述:使用socket连接获取数据,将数据存入数组,每当收到一条是数据的时候,解析数据、添加到数据同时更新tableview中的数据。tableview的dataSource为这个数组。
  • 遇到的问题:数据更新了但是Tableview中的数据要滑动一下tableview才能同步数据
  • 原因分析:socket连接是异步的,更新UI是要在主线程的。所以把更新UI的方法添加到主线程即可。就是把reloadData方法添加到主线程。

UITableView高度问题

  • 固定高度的时候使用self.tableView.rowHeight = 88
    不要使用UITableViewDelegate中的
1
2
3
4
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// return xxx
}
  • 使用第二个方法设置高度的时候,rowHeight属性会失效。一般情况下,用第一种方法去实现固定高度。第二种方法实现,多种Cell的高度。

  • 需要计算高度的时候是有第三方框架

参考文章:

优化UITableViewCell高度计算的那些事

UITableView-FDTemplateLayoutCell - GitHub链接


label自适应宽高一级cell的自适应宽高

  • 需求如下:label根据内容自适应宽度,label根据内容自适应高度。cell根据label自适应高度。
  • 实现代码
  • 结合另一篇文章
    label自适应高度可以实现cell自适应。也可以使用第三方框架。
1
2
3
4
5
6
7
8
cell.userName.text =   [NSString stringWithFormat:@"%@ : ", _dataArray1[indexPath.row][@"userName"]];
cell.barrageContent.text = _dataArray1[indexPath.row][@"message"];
CGFloat width = [UILabel getWidthWithTitle:cell.userName.text font:cell.userName.font];
CGFloat userNameHeigth = [UILabel getHeightByWidth:width title:cell.userName.text font:cell.userName.font];
CGFloat height = [UILabel getHeightByWidth:200 title:cell.barrageContent.text font:cell.barrageContent.font];
cell.userName.frame = CGRectMake(5, 0, width, userNameHeigth);
cell.barrageContent.frame = CGRectMake(5+5+cell.userName.frame.size.width, 0, 200, height);
_barrageView.rowHeight = height;

JsonKit报错

一个是ARC问题 添加 -fno-obj-arc

另外一个是JsonKit在64位机器上出现Crash的问题
原因:内存溢出
解决办法:因为JsonKit太久没有更新还是使用MRC所有尽量不要在使用JsonKit换其他框架
已经用了的解决办法:下载这个人的JsonKit替换掉原来的JsonKit就好了。