我真的被这个问题困扰了,我把这归咎于我生锈的 SQL/REGEX,但我希望你能帮忙。
我有这个 CoreData 实体:
@interface Movie : NSManagedObject
@property (nonatomic, retain) id genreArray;
@property (nonatomic, retain) NSNumber * imdbID;
@property (nonatomic, retain) NSNumber * isPlaying;
@property (nonatomic, retain) NSNumber * isPromo;
@property (nonatomic, retain) NSNumber * isTickets;
@property (nonatomic, retain) NSDate * lastUpdate;
@property (nonatomic, retain) NSNumber * movieID;
@property (nonatomic, retain) NSString * movieName;
@property (nonatomic, retain) NSString * movieName_EN;
@property (nonatomic, retain) id movieOtherNames;
@property (nonatomic, retain) NSString * posterPicture;
@property (nonatomic, retain) etcetcetc;
@结束
所以,我想按名称搜索电影。问题是名称可以位于 movieName 或 movieName_EN 下,也可以位于数组 movieOtherNames 内的其中一个名称内。
目前,我徒劳的请求是这样的:
Movie* movie = nil;
NSEntityDescription *allMovs = [NSEntityDescription entityForName:@"Movie"
inManagedObjectContext:[self mainManagedObjectContext]];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:allMovs];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"premiereDate" ascending:NO];
[request setSortDescriptors:@[sortDescriptor]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"$movieName contains[cd] %@ OR %@ contains[cd] $movieName OR $movieName_EN contains[cd] %@ OR %@ contains[cd] $movieName_EN OR ANY $movieOtherNames MATCHES %@", movieName, movieName, movieName, movieName, movieName];
[request setPredicate:predicate];
NSError *error;
NSArray* moviesArray = [[self mainManagedObjectContext] executeFetchRequest:request error:&error];
if(error)
SRTLog(@"CoreData: NO movieTimes! Deal with error...");
if([moviesArray count] > 0)
movie = [moviesArray objectAtIndex:0];
return movie;
我的应用在执行这段代码时崩溃了。我的猜测是 NSPredicate。那里出了点问题。
任何人都可以帮我解决如何搜索可以包含(或包含)在 2 个字段和一个字符串数组中的字符串吗?
我将为任何愿意提供帮助的好心人刷新 Stack OverFlow。
最佳答案
我认为您对这个谓词的理解有点不对。如果它解决了问题,请尝试实现它。如果没有,请添加一些错误描述和确切的行。
我希望代码本身是不言自明的:
NSString *movieName = @""; // get the true name value
NSArray *predicateCompounds = @[
[NSPredicate predicateWithFormat:@"movieName LIKE[cd] %@", movieName],
[NSPredicate predicateWithFormat:@"%@ LIKE[cd] movieName", movieName],
[NSPredicate predicateWithFormat:@"movieName_EN LIKE[cd] %@", movieName],
[NSPredicate predicateWithFormat:@"%@ LIKE[cd] movieName_EN", movieName]
];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicateCompounds];
关于ios - 将 NSPredicate 设置为 NSFetchRequest 后 executeFetchRequest 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349575/