2016-03-04 93 views
1

我有一個表視圖,使用NSURLSession作爲數據源獲取數據的結果。這是我的NSArray這是負責該表。請求完成後重新載入表

@property (strong, nonatomic) NSMutableArray *results; 

這是我的委託和數據源的方法

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [_results count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

    // Configure the cell... 
    WordResult *word = (WordResult *)[_results objectAtIndex:indexPath.row]; 
    cell.textLabel.text = word.defid; 

    return cell; 
} 

在我從MashapeviewDidLoad,我拿來請求,並嘗試將結果映射到我的自定義類WordResult 這裏是我取的方法

#pragma mark - GET Request 
- (void)fetchDataFromMashape:(NSURL *)URL { 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 
    [request setHTTPMethod:@"GET"]; 
    [request setValue:API_KEY_MASHAPE forHTTPHeaderField:API_MASHAPE_HEADER_1]; 
    [request setValue:API_ACCEPT forHTTPHeaderField:API_MASHAPE_HEADER_2]; 

    NSURLSession *session = [NSURLSession sharedSession]; 
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request 
              completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
     self.results = [self processResultData:jsonResult]; 
    }]; 

    [task resume]; 
} 

- (NSMutableArray *)processResultData:(NSDictionary *)dict { 

    NSArray *list = [dict objectForKey:@"list"]; 
    NSMutableArray *tempListOfWord = [[NSMutableArray alloc] init]; 

    if (list) { 
     for (NSDictionary *item in list) { 
      WordResult *word = [[WordResult alloc] initWithDictionary:item]; 
      [tempListOfWord addObject:word]; 
     } 
    } 

    NSLog(@"Result array of word: %@", tempListOfWord); 
    return tempListOfWord; 
} 

我的問題是,我不知道在我的結果數組被賦值後重新加載數據的位置d通過獲取方法並駁回我在我的viewDidLoad上顯示的進展HUD。 這裏是我的viewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [SVProgressHUD show]; 
    [self fetchDataFromMashape:_finalURLrequest]; 

} 

那麼,我應該把[SVProgressHUD dismiss][self.tableView reloadData]我的請求已經完成後? 任何幫助,將不勝感激。

+0

您應該關閉你的[SVProgressHUD解僱]上面的回報,然後重新載入你的tableview [self.tableView reloadData] –

+0

已經嘗試在我的'processResultData'權利返回之前,但它不工作@KamleshShingarakhiya –

回答

1

刷新在主線程上你的餐桌

dispatch_async(dispatch_get_main_queue(), ^{ 
    [_tableView reloadData]; 
}); 
+0

謝謝Wasif Saood。我在主隊列中做到了,並且工作正常! –

0

試試這個:

你可以把[SVProgress dismmis],也刷新你的tableview [self.tableView reloadData]self.results = [self processResultData:jsonResult];

+0

它的工作,Kamlesh Shingarakhiya –

+0

奇怪。你是否得到這個日誌NSLog(@「word的結果數組:%@」,tempListOfWord); ? –

+0

雅,它顯示應該。 –

0

一個偉大的tableView編碼模式投入reload通話setters模型對象,那麼你將不會錯過任何數據更改。針對你的情況例如制定者result

-(void)setResult:(NSMutableArray*)result{ 
    _result = result; 
    [self.tableView reloadData] 
    [SVProgressHUD dismiss] 
} 
0

在您的viewDidLoad之前調用fetchdata做

self.results=[[NSMutableArray alloc]init]; 

然後分配數據

和陣列後您[self.tableView reloadData]完成塊內調用然後在取數據函數中[task resume]之後調用svprogress hud hide方法