numberOfRowsInSection方法正在调用两次

时间:2015-02-13 05:47:04

标签: ios objective-c iphone uitableview xcode6

我正在从appcoda开发一个简单的表应用程序。我在numberOfRowsInSection方法中有一个混乱。当我使用numberOfRowsInSection方法中的 NSLog 在控制台中打印值时,控制台会显示两次而不是一次的值,这意味着调用numberOfRowsInSection方法两次。

那么你能告诉我为什么会这样吗?

这是我的代码

@implementation ViewController {
    NSArray *recipes;
}

- (void)viewDidLoad {
    [super viewDidLoad];
     recipes = [NSArray arrayWithObjects:@"Egg Benedict", @"Mushroom Risotto", @"Full Breakfast", @"Hamburger", @"Ham and Egg Sandwich", @"Creme Brelee", @"White Chocolate Donut", @"Starbucks Coffee", @"Vegetable Curry", @"Instant Noodle with Egg", @"Noodle with BBQ Pork", @"Japanese Noodle with Pork", @"Green Tea", @"Thai Shrimp Cake", @"Angry Birds Cake", @"Ham and Cheese Panini", nil];

}

此方法在控制台中两次打印值而不是一次

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

    NSLog(@"No of Recipe :- %d",[recipes count]);
    return [recipes count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *tableIdentifier = @"recipeCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableIdentifier];
    }
    cell.textLabel.text = [recipes objectAtIndex:indexPath.row];
    return cell;
}

3 个答案:

答案 0 :(得分:2)

这可能是一种正常行为。在numberOfRows方法中放置一个断点并查看调用堆栈。您可以看到框架本身从两个不同的流中调用numberOfRows。就我而言,我可以看到:

  1. [UITableView didMoveToWindow]
  2. 调用后
  3. 来自[UITableView layoutSubviews]
  4. 的其他人

答案 1 :(得分:-1)

我认为你调用reloadData方法2次所以numberOfRowsInSection方法也被调用了2次。

答案 2 :(得分:-2)

查看tableView的部分数量。必须设置为1!