Ios NSManagedObject的NSSet的NSPredicate

Ios NSManagedObject的NSSet的NSPredicate,ios,core-data,entity-relationship,Ios,Core Data,Entity Relationship,我有一个获取请求,如下所示: NSFetchRequest *songRequest = [NSFetchRequest fetchRequestWithEntityName:@"Song"]; 我还有一个名为genreFilter的NSSet类型(NSManagedObjects) 我想设置一个谓词来过滤与流派过滤器中的流派有关系的歌曲 我可以这样设置NSPredicate吗: NSPredicate *songRequestPredicate = [NSPredicate predicat

我有一个获取请求,如下所示:

NSFetchRequest *songRequest = [NSFetchRequest fetchRequestWithEntityName:@"Song"];
我还有一个名为genreFilter的NSSet类型(NSManagedObjects)

我想设置一个谓词来过滤与流派过滤器中的流派有关系的歌曲

我可以这样设置NSPredicate吗:

NSPredicate *songRequestPredicate = [NSPredicate predicateWithFormat:@"genre IN %@", [_genreFilter allObjects]];
?

类型如下:

@interface Genre : NSManagedObject

@property (nonatomic, strong) NSNumber * id;
@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSSet *preset;
@property (nonatomic, strong) NSSet *song;
@end
@interface Genre (CoreDataGeneratedAccessors)

- (void)addPresetObject:(Preset *)value;
- (void)removePresetObject:(Preset *)value;
- (void)addPreset:(NSSet *)values;
- (void)removePreset:(NSSet *)values;

- (void)addSongObject:(Song *)value;
- (void)removeSongObject:(Song *)value;
- (void)addSong:(NSSet *)values;
- (void)removeSong:(NSSet *)values;

@end
@interface Song : NSManagedObject

@property (nonatomic, strong) NSNumber * arousal;
@property (nonatomic, strong) NSNumber * id;
@property (nonatomic, strong) NSNumber * match;
@property (nonatomic, strong) NSNumber * popularity;
@property (nonatomic, strong) NSNumber * valence;
@property (nonatomic, strong) NSNumber * cloud;
@property (nonatomic, strong) Genre *genre;
@property (nonatomic, strong) Year *year;
@property (nonatomic, strong) Period *period;
@property (nonatomic, strong) NSNumber *yearReleased;

@property (nonatomic, assign) float score;
@property (nonatomic, readonly) MPMediaItem *mediaItem;

@end
还有这样的歌:

@interface Genre : NSManagedObject

@property (nonatomic, strong) NSNumber * id;
@property (nonatomic, strong) NSString * name;
@property (nonatomic, strong) NSSet *preset;
@property (nonatomic, strong) NSSet *song;
@end
@interface Genre (CoreDataGeneratedAccessors)

- (void)addPresetObject:(Preset *)value;
- (void)removePresetObject:(Preset *)value;
- (void)addPreset:(NSSet *)values;
- (void)removePreset:(NSSet *)values;

- (void)addSongObject:(Song *)value;
- (void)removeSongObject:(Song *)value;
- (void)addSong:(NSSet *)values;
- (void)removeSong:(NSSet *)values;

@end
@interface Song : NSManagedObject

@property (nonatomic, strong) NSNumber * arousal;
@property (nonatomic, strong) NSNumber * id;
@property (nonatomic, strong) NSNumber * match;
@property (nonatomic, strong) NSNumber * popularity;
@property (nonatomic, strong) NSNumber * valence;
@property (nonatomic, strong) NSNumber * cloud;
@property (nonatomic, strong) Genre *genre;
@property (nonatomic, strong) Year *year;
@property (nonatomic, strong) Period *period;
@property (nonatomic, strong) NSNumber *yearReleased;

@property (nonatomic, assign) float score;
@property (nonatomic, readonly) MPMediaItem *mediaItem;

@end

对。在我看来这是正确的


这里是我给另一个问题的答案,它包含了简单的指令和代码,可以让一个基本的核心数据项目启动并运行。我经常使用这种基本设置来快速测试类似的内容。

在这种情况下,比较的字段似乎是一个字符串:
NSPredicate*谓词=[NSPredicate predicateWithFormat:@“info.name=%@”,self.bankInfo.name]我试图比较谓词中的对象,但我想这没有多大意义,因为不能将对象真正表示为字符串。在我的例子中,我应该只取genre.name,而不是关系中的genre对象。谢谢你的回答,顺便说一句!不,你可以比较对象!你的谓词在我看来很好。。。给出我的示例只是为了提供快速创建基本核心数据项目的步骤,您可以使用(必要时进行修改)来测试谓词。如果您是因为代码不工作而发布问题,那么您可以使用这个项目,通过修改来测试谓词来隔离问题。如果你发现这个简单的项目是可行的,那么你就知道你的谓词是正确的,你的问题在别处。同样,您的谓词看起来正常,您可以比较对象,设置一个小项目可能有助于调试,仅此而已..设置大约需要5分钟,创建简单的对象,仅使用您需要测试的关系并粘贴到谓词中,确认其正常,然后在别处查找问题。如果它不起作用,那么它只会是一些简单的错误,因为它看起来对我很好。哦,太好了!好吧,我要试一试。谢谢谢谢它起作用了!直到现在我才有机会尝试一下。