gpt4 book ai didi

objective-c - NSPredicate:加入对象或对象ID

转载 作者:行者123 更新时间:2023-11-29 11:16:19 26 4
gpt4 key购买 nike

我有一个具有 1:n 关系的 coredata 数据模型

Entity Item
Tag *tag;
....

Entity Tag
NSString *name;

我想获取项目,女巫与标签有关系。以下作品:

Tag *selectedTag = .....
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Item"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag.name = %@", selectedTag.name];

问题是,同名的标签可能不止一个。不应获取这些项目。

如何直接比较对象 (selectedTag) 或至少与 id 进行比较。

两者:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag == %@", selectedTag];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"[tag objectID] == %@", [selectedTag objectID] ];

不工作。

谢谢

最佳答案

听起来你想要标签的反向关系。

如果 Foo 与称为 tagMember 的 Tag 具有一对一关系,其逆向是 Tag 与称为 fooMembers 的 Foo 的一对多关系,则获取一个tagMember 是所选标签的所有 foo 的集合,您可以这样做:

NSSet *setOfFoos = selectedTag.fooMembers;

或者,如果您没有为 Tag 设置子类,因此不能使用点语法,您可以这样做:

NSSet *setOfFoos = [selectedTag valueForKey:@"fooMembers"];

(换句话说,由于您已经拥有与要查找的对象相关的项目,因此您可以直接从该项目中获取这些对象,而不是运行提取。)

关于objective-c - NSPredicate:加入对象或对象ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com