Iphone 核心数据一对多关系
我的核心数据模型中有一对多关系。一餐可以吃多种食物。我想用一餐的食物填充一张桌子。因此,如果第1餐有苹果、桔子和柠檬,那么桌子上就有这三种食物 非常感谢您的帮助,因为我完全陷入困境 这是我的模型: 以及NSManagedObject类: 餐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
@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];