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

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

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

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

 

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

  • 實現思路:左邊的每個模塊對應右邊的一類集合數據,在左邊的模型類中聲明一個集合屬性用來存儲對應右邊的數據.加載完一次數據就將響應的集合數據存入左邊的集合屬性中.這樣當用戶再一次點擊左邊模塊請求數據的時候,只要判斷左邊模型中的用來存儲右邊數據集合的屬性是否>0,大於0的話就再也不發起請求.解決了重複請求的問題.

  <1>第一次請求數據的代碼spa

  <2>重複請求作的判斷3d

三.分頁數據加載與上拉下拉刷新(MJRefresh)code

  • 請求分頁數據沒有什麼好說的,無非就是請求的頁碼加加,項目裏配合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 }
相關文章
相關標籤/搜索