如何在另一个视图控制器中按下保存按钮后设置关系?

时间:2012-08-21 06:35:34

标签: ios xcode

我在代码中设置关系时遇到了问题。

当按下“添加食物到列表”上的保存按钮时,我想将该食物的关系设置为“holdBy”我将其添加到的列表。我现在在AddFoodToListTVC:

- (IBAction)save:(id)sender
{


Food *food = [NSEntityDescription insertNewObjectForEntityForName:@"Food"

food.name = foodToListNameTextField.text;

[food setHeldBy:?????];

用外行人的话来说,我想说“我们刚刚看到的食物就是这种食物”。

这是我的第一个iOS项目,对不起新手的问题。提前谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我不知道如何使用Storyboard,但如果你对这种类型的答案持开放态度,我确实知道如何用纯代码做类似的事情。

对于简单的表格视图,您需要遵循两个通用规则:

1)告诉表格需要显示多少行

2)告诉表格你需要在每个单元格中呈现哪些元素

表中的行数通常由在View Controller的.h文件中声明的数组中的元素数量来定义。

这样的东西
// View Controller header file (.h file)
@interface
{
    ...
    NSMutableArray *arrOfItems;
}

然后在您的实现文件中,将食物添加到数组中,保存Core Data上下文,然后从Core Data执行提取并将结果存储到类变量数组中:

// this method gets called when your button is pressed
-(void)addFoodToList
{
    Food *food = [NSEntityDescription insertNewObjectForEntityForName:@"Food"

    food.name = foodToListNameTextField.text;

    [managedObjectContext save:nil];

    // for simplicity sake, we're doing a simple table reload
    [self fetchData]; // see below
    [myTableView reloadData]; // reloads the table to include the newly added food 
}

-(void)fetchData
{
    // core data fetch request of all items we want to display in the list

    arrOfItems = [managedObjectContext executeFetchRequest:request .... ];
}

请注意,您应该在此表视图委托方法中返回类变量数组中的项目数:

// View Controller implementation file (.m file)
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(int)section
{
    // after adding the item to your arrOfItems and then doing a fetch request
    // earlier (see above code), this next statement would return the correct value
    return [arrOfItems count];
}

剩下要做的就是在UITableViewCellForRow方法中:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString cellID = @"cellID";

    UITableViewCell *cell = [tableView dequeueReusableCellWithID:cellID];

    if(cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithTableViewCellStyle:UITableViewCellStyleDefault reusableIdentifier:cellID] autorelease];

        // init your element foodItemLabel
        foodTitleLabel = [[UILabel alloc] initWithFrame:...];
        foodTitleLabel.tag = 1;

        [cell.contentView addSubview:foodTitleLabel];

        [foodTitleLabel release];
    }

    foodTitleLabel = (UILabel *)[cell.contentView viewWithTag:1];

    FoodItem *foodItem = (FoodItem *)[arrOfItems objectAtIndexPath:indexPath.row];

    // display the food name
    foodTitleLabel.text = foodItem.title; 

    return cell;
}