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"]];

快乐编码

我已经想好了,但还没有时间发布答案,我回家后会发布。