0

我想在核心数据中构建一个类别实体。实体名称=类别。它有 2 个关系,称为 categoryParents 和 categoryChildren 这些关系都配置为“对多”,并且它们彼此相反。他们都注定要实体“类别”本身。我想创建一个递归类别实体,其子类别可能有多个父类别。

我想获得没有任何父类别的根类别。

但是,我收到“此处不允许使用多对多键”错误

这是我正在尝试的

-(NSArray *) getCategoriesRoot
{
    // Construct a fetch request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Category" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];

    //NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(categoryActive == %@) AND (categoryParents == nil)", [NSNumber numberWithBool:YES]];
    //NSPredicate *predicate = [NSPredicate predicateWithFormat:@"categoryParents.count = nil"];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"categoryParents = nil"];
    //NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(categoryActive == %@)", [NSNumber numberWithBool:YES]];
    [fetchRequest setPredicate:predicate];

    NSError *error = nil;
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

    if ([fetchedObjects count]!=0)
    {
        return fetchedObjects;
    }
    else
    {
        return nil;
    }
}

这是我得到的

2013-07-15 17:29:12.238 Basf Katalog [10206:c07] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“此处不允许使用多对多键”*第一次抛出调用堆栈:(0x1faa012 0x13e7e7e 0x10f2bd9 0x10f25f2 0x10f23c0 0x10f2195 0x10f1977 0x10f1464 0x10f05dd 0x10ee539 0x3999 0x37e3 0x22f4 0x19157 0x19747 0x1a94b 0x2bcb5 0x2cbeb 0x1e698 0x1f05df9 0x1f05ad0 0x1f1fbf5 0x1f1f962 0x1f50bb6 0x1f4ff44 0x1f4fe1b 0x1a17a 0x1bffc 0x207d 0x1fa5) libc++abi.dylib: terminate called throwing an exception

这是核心数据

这是我第一次发布到堆栈溢出,所以我还不能上传实体的截图!基本上我想要一个实体,它必须具有彼此相反的关系并指向实体本身。它们都是对多 categoryParents <<------>> categoryChildren 一个类别可能有很多父类别 一个类别可能有很多子类别


我是核心数据的新手。请帮忙!

4

1 回答 1

0
[NSPredicate predicateWithFormat:@"categoryParents.@count = 0"];

应该管用。

于 2013-07-15T15:07:53.840 回答