Ios 核心数据如何获取层次结构?
我有一个简单的核心数据应用程序。只有一个模型对象,其名称为Ios 核心数据如何获取层次结构?,ios,objective-c,core-data,Ios,Objective C,Core Data,我有一个简单的核心数据应用程序。只有一个模型对象,其名称为Data。它具有count和name属性。它自身也有两种关系。一个用于子数据,它是对多个关系,另一个是父数据,它是对一个关系和第一个关系的倒数 下面是核心数据图,如下所示: 这是我的问题。我想获取这些数据对象及其关系。假设有两个父数据对象,每个数据对象有两个子数据对象,我想像这个层次结构一样获取它们。以下是我用于在核心数据中创建此层次结构的代码: Data *parent1 = [self createDataWithName:@"Pa
Data
。它具有count
和name
属性。它自身也有两种关系。一个用于子数据
,它是对多个关系,另一个是父数据
,它是对一个关系和第一个关系的倒数
下面是核心数据图,如下所示:
这是我的问题。我想获取这些数据对象及其关系。假设有两个父数据
对象,每个数据
对象有两个子数据
对象,我想像这个层次结构一样获取它们。以下是我用于在核心数据中创建此层次结构的代码:
Data *parent1 = [self createDataWithName:@"Parent1" andCount:@10 inContext:context];
Data *subData11 = [self createDataWithName:@"Sub1-1" andCount:@11 inContext:context];
Data *subData12 = [self createDataWithName:@"Sub1-2" andCount:@12 inContext:context];
NSMutableOrderedSet *parent1Set = [parent1.subDatas mutableCopy];
[parent1Set addObject:subData11];
[parent1Set addObject:subData12];
parent1.subDatas = [NSOrderedSet orderedSetWithOrderedSet:parent1Set];
Data *parent2 = [self createDataWithName:@"Parent2" andCount:@20 inContext:context];
Data *sub21 = [self createDataWithName:@"Sub2-1" andCount:@21 inContext:context];
Data *sub22 = [self createDataWithName:@"Sub2-2" andCount:@22 inContext:context];
NSMutableOrderedSet *parent2Set = [parent2.subDatas mutableCopy];
[parent2Set addObject:sub21];
[parent2Set addObject:sub22];
parent2.subDatas = [NSOrderedSet orderedSetWithOrderedSet:parent2Set];
NSError *error;
[context save:&error];
if (error) {
NSLog(@"%@", error);
}
// Helper function to create Data object
- (Data *)createDataWithName:(NSString *)name andCount:(NSNumber *)count inContext:(NSManagedObjectContext *)context
{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Data"
inManagedObjectContext:context];
Data *data = [[Data alloc] initWithEntity:entity
insertIntoManagedObjectContext:context];
data.name = name;
data.count = count;
return data;
}
下面是我用来获取的代码:
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"Data"];
NSArray *result = [context executeFetchRequest:fetch error:NULL];
结果
数组包含包含子项的所有数据
对象。但我只想要父对象。我怎么去拿
谢谢。我认为检查nil不起作用,但您可以检查子对象的数量是否大于零。以下方面应起作用:
request = [NSFetchRequest fetchRequestWithEntityName:@"Data"];
request.predicate = [NSPredicate predicateWithFormat:@"subDatas.@count != 0"];
NSError *err = nil;
NSArray *results = [context executeFetchRequest:request error:&err];
另外,请注意,在加载核心数据时,可能不应该直接设置子数据。相反,请使用CoreDataGeneratedAccessor。如果正确设置核心数据,您将在Data.h文件中找到访问器方法。这些方法将负责生成子数据关系及其逆关系
因此,删除以下内容:
NSMutableOrderedSet *parent2Set = [parent2.subDatas mutableCopy];
[parent2Set addObject:sub21];
[parent2Set addObject:sub22];
parent2.subDatas = [NSOrderedSet orderedSetWithOrderedSet:parent2Set];
和(使用CoreDataGeneratedAccessor)将其替换为:
[parent2 addSubDatasObject:sub21];
[parent2 addSubDatasObject:sub22];
您的意思是使用像这样的预测:
@“subData!=nil”
。如果将此项添加到获取中,您将只拥有至少包含一个子数据的数据,或者可能找到没有父数据的数据:@“parentData==nil”
。