ios - 将 NSPredicate 设置为 NSFetchRequest 后 executeFetchRequest 崩溃

标签 ios sql regex core-data nspredicate

我真的被这个问题困扰了,我把这归咎于我生锈的 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/

相关文章:

mysql - 在 yii2 的 $query 中添加 beetween 选项

php - 全面的服务器端验证

ios - 有没有一种方法可以使用 C 或 C++ 库在 iOS 上生成、创建或导出 .ppt 演示文稿

ios - 在 Swift 闭包的闭包内部使用 unowned

sql - 计算列组合的出现次数

sql - 查找一组日期范围中的空白的好方法是什么?

基于正则表达式的匹配和替换与纳米?

ruby-on-rails - 在评论中提及用户用户名 (@mention) - Rails

java - 如何使用 "US-ASCII"和 HmacSHA256 将 java 代码覆盖到 Objective-C ?

ios - 在 PHAssetCollection 中过滤矩