2012-12-19 36 views
1

我正在使用Xcode創建一個iOS應用程序。我也在使用SQL服務器(xampp)。它的整體效果很好。但是我有問題在以下點:等待在ios中的sql查詢響應

-I有視圖用表視圖控制器和我填充使用SQL查詢的結果(想象標記列表是包含12行的陣列)

- (void)viewDidLoad 

[[API sharedInstance] commandWithParams:[NSMutableDictionary dictionaryWithObjectsAndKeys:@"listtags", @"command", nil] onCompletion:^(NSDictionary *json) { 

    NSArray* result = [[NSArray alloc] initWithArray:[json objectForKey:@"result"]]; 
    taglist =[[NSMutableArray alloc] initWithArray:result]; 
    [taglist removeAllObjects]; 
    for(NSDictionary* i in result){ 
     [taglist addObject:[i objectForKey:@"tag"]]; 
    } 
    NSLog(@"sql %u",taglist.count); 
}]; 

NSLog(@"did load %u",taglist.count); 
此表

}

而且有對tableviews

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

NSLog(@"table %u",taglist.count); 
return taglist.count; 
} 

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


NSLog(@"cell %u",taglist.count); 
cell.textLabel.text = [taglist objectAtIndex:indexPath.row]; 

return cell; 

}

兩個必需方法

問題是因爲它需要一段時間才能獲得查詢結果,我的表​​方法使用空的taglist數組來填充。所述NSLogs的輸出都是這樣

2012-12-19 14:35:41.470 iReporter[33507:c07] did load 0 
2012-12-19 14:35:41.473 iReporter[33507:c07] table 0 
2012-12-19 14:35:41.476 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.479 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.481 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.483 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.484 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.486 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.487 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.489 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.493 iReporter[33507:c07] cell 0 
2012-12-19 14:35:41.564 iReporter[33507:c07] sql 12 

這意味着viewDidLoad中,numberofRows和cellForRow功能後標記列表數組爲空。但是當查詢完成時,我可以得到正確的值。但到那時我的表格屬性已被定義,所以它是沒有用的, 我的問題是,有沒有辦法等待該響應,並確保它不是空的然後用它來創建表。 謝謝

+0

嗨,你找到了解決方案嗎?我有一個非常類似的問題。 –

+1

它已經這麼久了,但下面的答案應該工作。查詢完成後,塊內的任何內容都會執行。 onCompletion:^(NSDictionary * json){ // [self.tableView reloadData] }]; – ardavar

回答

1

當您從查詢中得到結果並更新taglist後,請致電[self.tableView reloadData]

+0

嗨,你怎麼知道當他們查詢他在viewDidLoad上執行完成?我有類似的情況。它可以放在一些塊或類似的東西嗎? –