我在代码中设置关系时遇到了问题。
当按下“添加食物到列表”上的保存按钮时,我想将该食物的关系设置为“holdBy”我将其添加到的列表。我现在在AddFoodToListTVC:
- (IBAction)save:(id)sender
{
Food *food = [NSEntityDescription insertNewObjectForEntityForName:@"Food"
food.name = foodToListNameTextField.text;
[food setHeldBy:?????];
用外行人的话来说,我想说“我们刚刚看到的食物就是这种食物”。
这是我的第一个iOS项目,对不起新手的问题。提前谢谢!
答案 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;
}