Iphone 核心数据一对多关系

Iphone 核心数据一对多关系,iphone,objective-c,ios,ios4,core-data,Iphone,Objective C,Ios,Ios4,Core Data,我的核心数据模型中有一对多关系。一餐可以吃多种食物。我想用一餐的食物填充一张桌子。因此,如果第1餐有苹果、桔子和柠檬,那么桌子上就有这三种食物 非常感谢您的帮助,因为我完全陷入困境 这是我的模型: 以及NSManagedObject类: 餐 @class Food; @interface Meal : NSManagedObject @property (nonatomic, retain) NSString *name; @property (nonatomic, retain) NSS

我的核心数据模型中有一对多关系。一餐可以吃多种食物。我想用一餐的食物填充一张桌子。因此,如果第1餐有苹果、桔子和柠檬,那么桌子上就有这三种食物

非常感谢您的帮助,因为我完全陷入困境

这是我的模型:

以及NSManagedObject类:

@class Food;

@interface Meal : NSManagedObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSSet *foods;

@end

@interface Meal (CoreDataGeneratedAccessors)

- (void)addFoodsObject:(Food *)value;
- (void)removeFoodsObject:(Food *)value;
- (void)addFoods:(NSSet *)values;
- (void)removeFoods:(NSSet *)values;

@end
食物

@class Meal;

@interface Food : NSManagedObject

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Meal *meals;

@end
这是我试图尝试的代码,但我遇到了一些问题

- (NSFetchedResultsController *)fetchedResultsController 
{    
    if (_fetchedResultsController != nil)
        return _fetchedResultsController;

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Food" inManagedObjectContext:_context];
    [fetchRequest setEntity:entity];

    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"Meal.foods == %@", entity]];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:@"Root"];

    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    [fetchRequest release];
    [theFetchedResultsController release];

    return _fetchedResultsController;      
}

你提到你有问题,但没有提到问题是什么;但是您的
NSFetchRequest
谓词在我看来并不正确。另外,
Food
上定义的
Food
是复数,但两者之间的关系是一个,有点混乱

您的UITableView应该填充来自一顿
饭的
食物
s,对吗?让我们调用
膳食
\u thismine
,那么获取谓词应该是:

NSPredicate *foodPredicate = [NSPredicate predicateWithFormat:@"meals == %@",_thisMeal];
[fetchRequest setPredicate:foodPredicate];
因此,您要获取的实体是
食品
;这个谓词确保他们的
fines
属性是UITableViewController要查找的
fine

已更新,以显示如何获取命名的
膳食

要获取名为“定制套餐”的
套餐


你的膳食和饮食课都错了。最好消除这些,让XCode自动重新生成 这些类通过(确保选择了您的实体):

fetchedResultsController
getter方法中,终止行:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"Meal.foods == %@", entity]];
您通常会使用谓词来过滤数据,例如含有香蕉的食物。您当前的谓词目前没有真正意义。它说的是“给我含有一种叫做‘实体’的食物的食物,……没有意义。”

既然你想吃饭

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Food" inManagedObjectContext:_context]; 
应该是:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Meal" inManagedObjectContext:_context];
(注意
@“膳食”

然后,您可以通过
fine.foods
访问每顿饭中的食物

这行:
self.fetchedResultsController=theftchedResultsController;

应该是:
\u fetchedResultsController=theftchedResultsController;


你所做的基本上就是调用你目前使用的方法。

你坚持什么?请确切地告诉我们你的问题是什么。为什么在这里使用一对多关系?如果
食物
代表一种食物而不是一种特定的食物,那么我希望给定的
食物
实例能够与更多的t相关韩:一顿饭。你能解释一下这顿饭吗?这一行会给我错误的饭*\u这顿饭。那一行应该是什么?对不起,我的观点是,你的
UITableViewController
必须“知道”显示的是什么饭,才能让你的
NSFetchRequest
正常工作。据推测,它从上游某个地方获得了一个用餐参考在上一个表视图中被选中后,会发生这种情况。为了便于讨论,我将其命名为
\u thismine
,因为在您的代码中,我不知道特定膳食的引用是什么。您能告诉我如何获取膳食\u thismine吗?假设我想要一份名为“定制膳食”的膳食,然后我想显示自定义食品中的食品。整个概念让我困惑。
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Meal" inManagedObjectContext:_context];