我有一个表视图,它使用以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;
}
在我的viewDidLoad
中,我从Mashape获取了请求,并尝试将结果映射到我的自定义类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;
}
我的问题是,在我的结果数组被fetch方法分配后,我不知道在哪里重新加载数据,并且忽略了我在viewDidLoad
上显示的进度HUD。
这是我的viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
[SVProgressHUD show];
[self fetchDataFromMashape:_finalURLrequest];
}
那么在我的请求完成后我应该在哪里放[SVProgressHUD dismiss]
和[self.tableView reloadData]
?
任何帮助将不胜感激。
答案 0 :(得分:1)
在主线程上重新加载表
dispatch_async(dispatch_get_main_queue(), ^{
[_tableView reloadData];
});
答案 1 :(得分:0)
试试这个:
您可以在[SVProgress dismmis]
[self.tableView reloadData]
并重新加载您的tableview self.results = [self processResultData:jsonResult];
答案 2 :(得分:0)
一个出色的tableView编码模式是将reload
调用setters
模型对象,然后您就不会错过任何数据更改。例如,在您的情况下result
的setter:
-(void)setResult:(NSMutableArray*)result{
_result = result;
[self.tableView reloadData]
[SVProgressHUD dismiss]
}
答案 3 :(得分:0)
在调用fetchdata之前的viewdidload中执行
self.results=[[NSMutableArray alloc]init];
然后在为数组分配数据
后,在完成块内调用[self.tableView reloadData]
然后在获取数据函数中的[task resume]
之后调用块外的svprogress hud hide方法