Core data 核心数据检索关系数据
检索通过菜单实体创建的项目时,我确实遇到了问题。这是我用来向特定菜单对象添加项目的代码Core data 核心数据检索关系数据,core-data,Core Data,检索通过菜单实体创建的项目时,我确实遇到了问题。这是我用来向特定菜单对象添加项目的代码 -(void)additem:(NSString *)entity :(NSDictionary *)aDictionary :(NSString *)menu { NSLog(@"additem"); NSError *error = nil; Menu *menuItem = nil; NSFetchRequest * request = [[NSFetchRequest al
-(void)additem:(NSString *)entity :(NSDictionary *)aDictionary :(NSString *)menu
{
NSLog(@"additem");
NSError *error = nil;
Menu *menuItem = nil;
NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Menu" inManagedObjectContext:managedObjectContext]];
[request setPredicate:[NSPredicate predicateWithFormat:@"mname=%@ and msection =%@",@"Parents",@"Keydates"]];
menuItem = [[managedObjectContext executeFetchRequest:request error:&error] lastObject];
if (error) {
//Handle any errors
}
if (!menuItem) {
//Nothing there to update
NSLog(@"This class doesn't exist");
}
Items *anitem = (Items *)[NSEntityDescription insertNewObjectForEntityForName:@"Items" inManagedObjectContext:managedObjectContext];;
anitem.type = [aDictionary objectForKey:@"type"];
anitem.title = [aDictionary objectForKey:@"title"];
anitem.image = [aDictionary objectForKey:@"image"];
anitem.subtitle = [aDictionary objectForKey:@"subtitle"];
[menuItem addItemsObject:anitem];
[managedObjectContext save:&error];
}
我想使用谓词检索在特定菜单对象上创建的所有项。下面是我试图检索它的代码
- (void) readItems: (NSString *)section {
NSLog(@"readItems");
NSError *error = nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Menu"
inManagedObjectContext:managedObjectContext];
fetchRequest.resultType = NSDictionaryResultType;
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"mname=%@ and msection = %@",@"Parents",@"Keydates"]];
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (Items *item in fetchedObjects) {
NSLog(@">>>>>>%@",item);
}
}
有人能给我指一下正确的方向吗?我知道我通过了那个部分,但并没有使用它。我已将实际值放入。您的
读取项:
方法将获取的实体指定为菜单
,但当您执行获取时,您期望的是项
(因为您开始迭代获取对象并将其转换为项)
相反,您要做的是将实体设置为Item,并将谓词更改为
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"items.mname=%@ and items.msection = %@",@"Parents",@"Keydates"]];
此外,你应该考虑重命名你的人际关系。“关系”字段精确地指定当您按照箭头操作时希望看到的内容。因此,当我查看项目并按照其箭头指向菜单时,我希望此关系的名称为Menu,而您称之为menuItems。对于“从菜单到项”的关系,您已正确执行了此操作
这样,我们将得到一个更可读的谓词,如下所示:
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"menu.mname=%@ and menu.msection = %@",@"Parents",@"Keydates"]];
快乐编码我已经想好了,但还没有时间发布答案,我回家后会发布。