我在核心数据模型中有两个实体,如:A <<--->> B
实体B具有属性名称,该属性名称是字符串对象,并且具有AObjects与A的关系;相反,实体A有一个BObjects到B.的关系
现在我想得到一个与A实体连接的所有BObject的列表然后,我想在标签中显示它们的名字。
这可能吗?我知道CoreData不支持多对多关系...
谢谢!
答案 0 :(得分:2)
我认为您可能没有完全描述您的情况,因为Core Data绝对支持多对多关系。我怀疑你可能意味着NSFetchedResultsController不支持多对多关系? 据我所知,这是正确的。(编辑:可以使用具有多对多关系的NSFetchedResultsController ......如何做到这一点并不是很明显。)
要在没有NSFetchedResultsController的情况下执行此操作,请识别/获取您感兴趣的A实体,然后遍历您感兴趣的关系。因此,如果您已经知道您对我将调用的特定A对象感兴趣使用类名A和B的theAObject,您可以使用点语法和快速枚举来遍历关系,使用类似下面的内容:
for (B *theBObject in theAObject.BObjects) {
NSLog(@"theBObject.name: %@.", theBObject.name);
// Run whatever code you want to here on theBObject.
// This code will run once for each B Object associated with theAObject
// through the BObjects relationship.
}
或者,您可以设置获取请求以获取您感兴趣的一组AObject,然后遍历每个AObject的BOjects关系。它与多对多关系没有任何区别......每个AObjecct都将返回其BObjects关系中的所有B对象。
后来 现在,您说要获取所有名称,并将其显示在标签中。让我们为你打破这个:
NSString *myLabel = null;
// You may of course want to be declaring myLabel as a property and @synthesising
// it, but for the sake of a complete example we'll declare it here which means
// it will only have local scope.
for (B *theBObject in theAObject.BObjects) {
myLabel = [myLabel stringByAppendingString:theBObject.name];
// Add a line break in the string after each B object name.
myLabel = [myLabel stringByAppendingString:@"\n"];
}
// Do something with your myLabel string to set your desired label.
答案 1 :(得分:0)
您可以尝试这样的谓词:
NSPredicate * fetchPredicate = [NSPredicate predicateWithFormat:@“任何AObjects =%@”,[A的NSManagedObjectID]];