UITableViewCell问题indexPath.row不能正确显示

我build立了一个UITableView,它有3个部分,每个部分有3行。 我已经使用下面的代码来指定我想要某些数组中的对象作为行内容出现;

recipeData = [[NSArray alloc] initWithObjects:@"Chicken & Veg Rissoto",@"Super Healthy Pizza",@"Salmon Burgers",nil]; dessertsData = [[NSArray alloc] initWithObjects:@"Raspberry Parfaits",@"ChocNana YumYum",@"Grilled Choc Sandwich",nil]; beveragesData = [[NSArray alloc] initWithObjects:@"Berry Smoothie",@"Banana Berry Smoothie",@"Cocoa Soy Smoothie",nil]; [self setTitle:@"Recipe Table"]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 3; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.recipeData count]; return [self.dessertsData count]; return [self.beveragesData count]; 

这一切都运行良好,直到今天晚上,当我在图像的左边添加的文本行。 图像显示完美,但由于某些原因,所有行都由来自beveragesData的对象填充,并完全忽略了另外两组对象。 代码在我已经使用的下面。 我希望这是很简单的,只是写错误的if语句。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: SimpleTableIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SimpleTableIdentifier] autorelease]; } if(indexPath.section == 0) if(indexPath.row == 0) [cell.imageView setImage:[UIImage imageNamed:@"Main0.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; if(indexPath.section == 0) if(indexPath.row == 1) [cell.imageView setImage:[UIImage imageNamed:@"Main1.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; if(indexPath.section == 0) if(indexPath.row == 2) [cell.imageView setImage:[UIImage imageNamed:@"Main2.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; if(indexPath.section == 1) if(indexPath.row == 0) [cell.imageView setImage:[UIImage imageNamed:@"Dessert0.png"]]; [cell.textLabel setText:[dessertsData objectAtIndex:indexPath.row]]; if(indexPath.section == 1) if(indexPath.row == 1) [cell.imageView setImage:[UIImage imageNamed:@"Dessert1.png"]]; [cell.textLabel setText:[dessertsData objectAtIndex:indexPath.row]]; if(indexPath.section == 1) if(indexPath.row == 2) [cell.imageView setImage:[UIImage imageNamed:@"Dessert2.png"]]; [cell.textLabel setText:[dessertsData objectAtIndex:indexPath.row]]; if (indexPath.section == 2) if(indexPath.row == 0) [cell.imageView setImage:[UIImage imageNamed:@"Drink0.png"]]; [cell.textLabel setText:[beveragesData objectAtIndex:indexPath.row]]; if(indexPath.section == 2) if(indexPath.row == 1) [cell.imageView setImage:[UIImage imageNamed:@"Drink1.png"]]; [cell.textLabel setText:[beveragesData objectAtIndex:indexPath.row]]; if(indexPath.section == 2) if(indexPath.row == 2) [cell.imageView setImage:[UIImage imageNamed:@"Drink2.png"]]; [cell.textLabel setText:[beveragesData objectAtIndex:indexPath.row]]; return cell; 

因此,目前,当运行UITableView的所有9行都来自beveragesData的对象。 任何帮助将不胜感激。

谢谢

Objective-C结构不是基于缩进

这个:

 if(indexPath.section == 0) if(indexPath.row == 0) [cell.imageView setImage:[UIImage imageNamed:@"Main0.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; 

应该:

 if(indexPath.section == 0) if(indexPath.row == 0) { [cell.imageView setImage:[UIImage imageNamed:@"Main0.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; } 

这就像C / C ++ / Java – 如果适用于下一个语句。 如果你需要多个,你需要用大括号括起来。 你也可以一直放下,不用担心。

另外,这个代码

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.recipeData count]; return [self.dessertsData count]; return [self.beveragesData count]; } 

不做你认为的事情。 第一个返回总是运行,第二个两行被忽略(应该得到一个警告)。

您的numberOfRowsInSection:部分也不正确; 应该:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if ( section == 0 ) return [self.recipeData count]; if ( section == 1 ) return [self.dessertsData count]; if ( section == 3 ) return [self.beveragesData count]; } 

你也应该使用switch语句:

 switch ( indexPath.section ) { case 0: { if(indexPath.row == 0) { [cell.imageView setImage:[UIImage imageNamed:@"Main0.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; } if(indexPath.row == 1) { [cell.imageView setImage:[UIImage imageNamed:@"Main1.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; } if(indexPath.row == 2) { [cell.imageView setImage:[UIImage imageNamed:@"Main2.png"]]; [cell.textLabel setText:[recipeData objectAtIndex:indexPath.row]]; } } } /* etc. */