一.推薦關注模塊(一個控制器控制兩個tableView) -- 數據的顯示
- 剛開始加載數據值得注意的有以下幾點
- 導航控制器會自動調整scrollView的contentInset,最好是取消系統的設置,自己設置contentInset
- 請求數據的時候用到了MJExtension來字典轉模型,切記一定看好用模型類調用mj_**方法.自己當時手賤敲錯了,系統總報錯某某方法找不到.解決錯誤搞了很久.
- 請求完數據界面沒有數據怎么辦? -- 自己又忘了刷新表格啦!!
二.解決數據重復請求的問題
如上圖:用戶已經請求了一次網紅數據了,為了不浪費用戶流量,自己設置數據緩存,將用戶請求過的數據暫時保存,用到的時候直接拿出來用.
- 實現思路:左邊的每一個模塊對應右邊的一類集合數據,在左邊的模型類中聲明一個集合屬性用來存儲對應右邊的數據.加載完一次數據就將響應的集合數據存入左邊的集合屬性中.這樣當用戶再一次點擊左邊模塊請求數據的時候,只要判斷左邊模型中的用來存儲右邊數據集合的屬性是否>0,大於0的話就不再發起請求.解決了重復請求的問題.
<1>第一次請求數據的代碼
<2>重復請求做的判斷
三.分頁數據加載與上拉下拉刷新(MJRefresh)
- 請求分頁數據沒有什么好說的,無非就是請求的頁碼加加,項目里配合MJRefresh進行上拉請求分頁數據.初始化上拉下拉的代碼
- 分頁的實現(注意響應回來的數據是否正確,百思中總頁數和下頁頁數有的就對不上.還好總數正確),也是講右邊數據的總數,與當前頁的頁數這兩個屬性聲明到了左邊模型類中.第一次請求數據的時候就當前頁屬性賦值為1,賦值總數
- 一定注意,不管是第一次請求數據,還是上拉下拉請求數據,還是刷新表格,都要時刻監測footer的樣式
- 上拉加載更多數據代碼:
- 下拉刷新代碼:
1 /** 下拉加載新數據 */ 2 - (void)loadNewData 3 { 4 ChaosRecommendCategory *category = ChaosSelectedCategory; 5 NSDictionary *parameters = @{ 6 @"a" : @"list", 7 @"c" : @"subscribe", 8 @"category_id" : @(category.id) 9 }; 10 // 請求右邊用戶數據 11 [self.manager GET:@"http://api.budejie.com/api/api_open.php" parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) { 12 13 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 14 15 NSArray *users = [ChaosRecommendUser mj_objectArrayWithKeyValuesArray:responseObject[@"list"]]; 16 17 // 下拉會重復添加數據,為了保證不重復添加,每次下拉都清空原有的數據 18 [category.users removeAllObjects]; 19 20 // 將分類對應的用戶數據添加到集合中 21 [category.users addObjectsFromArray:users]; 22 // 第一次請求右邊數據的時候,將總數記錄下來 23 category.total = [responseObject[@"total"] integerValue]; 24 // 同時記錄頁數,第一次請求,肯定是第一頁 25 category.currentPage = 1; 26 27 // 刷新右邊的表格 28 [self.recommendUserTableView reloadData]; 29 // 刷新完表格,頭部停止刷新 30 [self.recommendUserTableView.mj_header endRefreshing]; 31 // 決定footer的狀態 32 [self checkFooterState]; 33 34 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 35 36 [self.recommendUserTableView.mj_header endRefreshing]; 37 [SVProgressHUD showErrorWithStatus:@"請求數據失敗"]; 38 }]; 39 }