nspredicate - NSInvalidArgumentException',原因 : 'Invalid predicate: nil RHS, 需要帮助解决这个问题

标签 nspredicate nsfetchedresultscontroller invalidargumentexception

我已经阅读了有关此崩溃的其他帖子,这与返回 nil 的谓词有关,但我无法通过我的应用程序弄清楚这一点。有人可以帮我解决这个问题吗?

static NSString *const KJMWorkoutCategorySectionKeyPath = @"workoutCategory";

- (NSFetchedResultsController *)fetchedResultsControllerWithSearchString:(NSString *)searchString {
    NSManagedObjectContext *sharedContext; // my NSManagedObjectContext instance...

    NSFetchRequest *request = [NSFetchRequest new];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Workouts"
                                              inManagedObjectContext:sharedContext];
    request.entity = entity;
    request.predicate = [NSPredicate predicateWithFormat:@"(workoutName CONTAINS[cd] %@)", searchString];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:KJMWorkoutCategorySectionKeyPath ascending:YES];
    request.sortDescriptors = @[sortDescriptor];

    NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                                               managedObjectContext:sharedContext
                                                                                                 sectionNameKeyPath:KJMWorkoutCategorySectionKeyPath
                                                                                                          cacheName:nil];
    fetchedResultsController.delegate = self;

    NSError *error = nil;

    if (![fetchedResultsController performFetch:&error]) {
        NSLog(@"Unresolved error %@, %@", error, error.userInfo);
        abort();
    }

    return fetchedResultsController;
}

最佳答案

错误消息表明 searchStringnil

NSPredicate *filterPredicate = [NSPredicate 
            predicateWithFormat:@"(workoutName CONTAINS[cd] %@)", searchString];

如果目的是在没有给出搜索字符串的情况下显示所有对象,您应该
在这种情况下,只是不要为获取请求分配谓词:
if ([searchString length] > 0) {
    NSPredicate *filterPredicate = [NSPredicate 
            predicateWithFormat:@"(workoutName CONTAINS[cd] %@)", searchString];
    [request setPredicate:filterPredicate];
}

关于nspredicate - NSInvalidArgumentException',原因 : 'Invalid predicate: nil RHS, 需要帮助解决这个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17761168/

相关文章:

objective-c - DDMath解析器 : Parsing formulas which contain if statements

ios - UITableView没有窗口iOS13时的UITableViewAlertForLayoutOutsideViewHierarchy

iOS Swift Core Data 如何从 NSFetchedResultsController 中搜索 FetchedObjects

c# - 如何使用/ASCIIHexDecode解码图像

swift - NSInvalidArgumentException - 'Invalid top-level type in JSON write' - swift

laravel-4 - 创建 Laravel 项目

objective-c - NSPredicateEditor/NSRuleEditor 行的不同行模板

具有多种功能的 Swift 4 NSExpression

swift - 子查询中的 NSPredicate

ios - 核心数据实体中的空字符串与 nil