iOS不得姐項目--推薦關注模塊(一個控制器控制兩個tableView),數據重復請求的問題,分頁數據的加載,上拉下拉刷新(MJRefresh)


一.推薦關注模塊(一個控制器控制兩個tableView) -- 數據的顯示

  • 剛開始加載數據值得注意的有以下幾點
  1. 導航控制器會自動調整scrollView的contentInset,最好是取消系統的設置,自己設置contentInset
  2. 請求數據的時候用到了MJExtension來字典轉模型,切記一定看好用模型類調用mj_**方法.自己當時手賤敲錯了,系統總報錯某某方法找不到.解決錯誤搞了很久.
  3. 請求完數據界面沒有數據怎么辦? -- 自己又忘了刷新表格啦!!

二.解決數據重復請求的問題

 

如上圖:用戶已經請求了一次網紅數據了,為了不浪費用戶流量,自己設置數據緩存,將用戶請求過的數據暫時保存,用到的時候直接拿出來用.

  • 實現思路:左邊的每一個模塊對應右邊的一類集合數據,在左邊的模型類中聲明一個集合屬性用來存儲對應右邊的數據.加載完一次數據就將響應的集合數據存入左邊的集合屬性中.這樣當用戶再一次點擊左邊模塊請求數據的時候,只要判斷左邊模型中的用來存儲右邊數據集合的屬性是否>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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM