2014-01-31 146 views
3

我想在UITableViewController中显示一些数组。我有一个NIB自定义单元格。我遇到的问题是在我的数组加载到我的ViewDidLoad之前,我的表行试图填充。设置断点显示,正在创建我的表行,然后直接后,我的阵列给定的值(这是在把我的ViewDidLoadtableView cellForRowAtIndexPath:在ViewDidLoad之前运行?

谁能告诉我,为什么tableView方法是ViewDidLoad之前运行?我需要做什么来做,以确保被填充表行之前,我的数组装载

这里是我的ViewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"go"); 
    PFQuery *getCartQuery = [PFQuery queryWithClassName:@"chwCart"]; 
    [getCartQuery whereKey:@"userId" equalTo:[PFUser currentUser].objectId]; 
    [getCartQuery whereKey:@"status" equalTo:@"open"]; 

    [getCartQuery getFirstObjectInBackgroundWithBlock:^(PFObject *currentCartObject, NSError *error) { 

     // NSLog([currentCartObject objectId]); 

     currentCart = [currentCartObject objectForKey:@"cartContents"]; 

     dictFoodId = [currentCart valueForKey:@"foodId"]; 

     dictQty = [currentCart valueForKey:@"qty"]; 

    }]; 
    NSLog(@"Should be loaded"); 

     [self.tableView registerNib:[UINib nibWithNibName:@"foodCell" bundle:nil] forCellReuseIdentifier:@"foodCell"]; 


    } 

这里是我的tableView cellForRowAtIndexPath:

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"foodCell"; 
    foodCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    if (cell == nil) { 

     cell = [[foodCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 

    } 

    cell.foodTitle.text = [dictQty objectAtIndex:indexPath.row]; 


    return cell; 
} 

回答

3

我想这是因为要更新的数组块,运行到后台,并呼吁您的代表,只是简单地重新加载您的tableView成块完成

[getCartQuery getFirstObjectInBackgroundWithBlock:^(PFObject *currentCartObject, NSError *error) { 

     // NSLog([currentCartObject objectId]); 

     currentCart = [currentCartObject objectForKey:@"cartContents"]; 

     dictFoodId = [currentCart valueForKey:@"foodId"]; 

     dictQty = [currentCart valueForKey:@"qty"]; 

     [self.tableView reloadData]; 

    }]; 
3

您正在使用它执行过程中的块背景让你的tableview创建和委托方法被称为第一你只是这行代码添加到您的viewDidLoad代码,这将再次调用实现代码如下数组装载

**[self.tableView reloadData];** 

后使你的代码我n viewdidLoad应该看起来像这样

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
NSLog(@"go"); 
PFQuery *getCartQuery = [PFQuery queryWithClassName:@"chwCart"]; 
[getCartQuery whereKey:@"userId" equalTo:[PFUser currentUser].objectId]; 
[getCartQuery whereKey:@"status" equalTo:@"open"]; 

[getCartQuery getFirstObjectInBackgroundWithBlock:^(PFObject *currentCartObject, NSError *error) { 

    // NSLog([currentCartObject objectId]); 

    currentCart = [currentCartObject objectForKey:@"cartContents"]; 

    dictFoodId = [currentCart valueForKey:@"foodId"]; 

    dictQty = [currentCart valueForKey:@"qty"]; 
    [self.tableView reloadData]; 

}]; 
NSLog(@"Should be loaded"); 

    [self.tableView registerNib:[UINib nibWithNibName:@"foodCell" bundle:nil] forCellReuseIdentifier:@"foodCell"]; 


} 
相关问题