我正在尝试从方法更新我的应用中的tableview。该表使用数组allShoppingItems作为数据源但由于某种原因,我似乎无法将任何新对象添加到数组中。这是方法。它位于ShoppingListTableViewController。
- (void)addToShoppingList: (FoodItem *) newItem
{
if (newItem != nil) {
[self.allShoppingItems addObject:newItem];
[self.tableView reloadData];
}
}
我测试过传递的对象不是nil,也不是tableView。
编辑: 这是我的numberOfRowsInSection和cellForRowAtIndexPath方法,也位于ShoppingListTableViewController中。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return [self.allShoppingItems count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"shoppingListIdentifier" forIndexPath:indexPath];
// Configure the cell...
FoodItem *shoppingItem = [self.allShoppingItems objectAtIndex:indexPath.row];
cell.textLabel.text = shoppingItem.itemName;
return cell;
}
阵列在主视图控制器的viewDidLoad方法中初始化。以下是AllItemsTableViewController - 初始视图控制器。
- (void)viewDidLoad {
[super viewDidLoad];
self.allFoodItems = [[NSMutableArray alloc]init];
shoppingList = [[ShoppingListTableViewController alloc] init];
shoppingList.allShoppingItems = [[NSMutableArray alloc]init];
}
然后在那个班级打电话#39;展开方法。
- (IBAction)unwindToAllItems:(UIStoryboardSegue *)segue
{
AddNewItemViewController *source = [segue sourceViewController];
FoodItem *item = source.foodItem;
if (item != nil) {
[self.allFoodItems addObject:item];
[self.tableView reloadData];
}
if (item != nil && item.currentNumber<=item.lowLevel) {
[shoppingList addToShoppingList:item];
}
}
数组已初始化,但是为空,无论我尝试什么,addToShoppingList都不会向数组添加任何内容。我用NSLog(@"%@",self.allShoppingItems);
打印它,它始终显示的是&#34;()&#34;
也许有一种更简单的方法来实现这一目标。我只是希望能够将一个对象添加到表视图中,如果满足某些条件,也可以将它添加到第二个。
答案 0 :(得分:-1)
我注意到您的源代码中存在“CellForRowAtIndexPath”方法的故障。
您正在重复使用单元格。但是,如果出列过程返回nil,您还需要创建一个新单元格。
ie:您需要一些类似于以下内容的代码:
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@“shoppingListIdentifier”forIndexPath:indexPath];
如果(细胞==无){ cell = [[UITableViewCell alloc] init];
}