程序结构:
1. 整个程序在UIViewController 中 嵌套入了 UIViewController。
2. 对于“动弹页面”,UIViewController中放入UITableView。
3. Tool.h 中存放一些公用的方法。
使用工具:
1. 对于“需要登录”的提示,使用了苹果自带的actionsheet。
2. 对于不挡住主屏幕的文字提示,使用了 GCDiscreetNotificationView。
3.对于需要加载较长时间的等待提示(显示在屏幕中央),使用了 MBProgressHUD。
4.异步加载图片,使用了egoImage。
5.下拉刷新,使用了egoRefresh。
6.读取网络数据,以及检查网络是否连上,使用了AFNetwork。
7.图片下载及放置缓存,使用了oschina自己写的IconDownload。
登录相关执行流程:
1. 在viewController的viewDidAppear 处做出判断:if(self.isLoginJustNow)。
2.如果发现isLoginJustNow变成 YES 了,则刷新该页面,同时将 isLoginJustNow 设置成NO。
UItableView相关执行流程:
1. UITableVIew的操作中的刷新流程:
a. 判断 (isLoading ||isLoadOver) ,如果真,则直接返回,不执行刷新。
b. 判断是否为重新刷新: (!noRefresh),如果是,则 allCount = 0。
c. 设置 int pageIndex =allCount/20; (20是一页的行数)
d. isLoading =YES;
e. 执行网络查询语句。
f. 判断是否为重新刷新,如果是,则调用 clear 方法。(在这里调用clear而不是一开始就调用,是为了避免数据读取如果失败了,原有数据也clear掉)
g. isLoading =NO;
h. 判断查出的数据是否小于20.如果小于,表示已经查完:isLoadOver =YES。(如果isLoadOver=NO,则在最后一行显示“下一页”)
i. 判断查出来的列表是否为空,如果是,则:
isLoadOver = YES;
[self.tableTweets reloadData];
[self doneLoadingTableViewData];
return;
j. 如果查出来的列表不为空,则在newTweets数组的组建时逐条判断服务端来的每条数据是否与tweets中数据相同。然后:
[tweets addObjectsFromArray:newTweets];
[self.tableTweets reloadData];
[self doneLoadingTableViewData];
k. 如果查询失败,则:
isLoading = NO;
NSLog(@"动弹列表下载失败");
//下拉刷新恢复
[self doneLoadingTableViewData];
并相应做出提示:
if ([Config Instance].isNetworkRunning == NO) {
return;
}
if ([Config Instance].isNetworkRunning) {
[Tool ToastNotification:@"错误 网络无连接" andView:self.view andLoading:NO andIsBottom:NO];
}
l. 如果以上步骤没有return过,最后执行:
[self.tableTweets reloadData];
2. UITableVIew的操作中的clear流程:
allCount = 0; //清空计数
[tweets removeAllObjects]; // 清空table数组
[imageDownloadsInProgress removeAllObjects];
[tweetDownloadsInProgress removeAllObjects];
isLoadOver = NO; // 设置列表加载状态的标识符
3. 读取每行中的头像流程:
a. 判断 该行所需展示的object 中该头像属性是否为空,若不为空则直接显示该属性。
b. 判断该用户是否设置过头像,若未设置过则显示默认头像图片(本地)。
c. 判断cache中是否存有该头像,若cache中没有则进行联网读取。
4. 关于点击“下一页”:
a. 为“下一页”定义了一个nib。nib中的文字内容是“下一页”还是“正在加载...”由传入的参数isLoading 决定。
b. 点击下一页时:
1. isLoading = YES;
2. [ self.uitableView reloadData ];同时 发起加载下一页的数据请求。(注:在reloadData时,“下一页”那一行会重新绘制。这个时候即显示“正在加载...”)