NSPredicate for Not Equal To not working

时间:2017-03-27 23:41:55

标签: objective-c nspredicate

我试图让以下NSPredicate无法正常工作:

NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"obsSchoolName == '%@' AND obsStatus != 'paused'", currentSchool]];

有4条记录,其中一条用obsStatus设置为'暂停'

如果我删除了obsStatus!='paused',它会显示所有4条记录。

如果我把obsStatus =='暂停',它会将带有obsStatus的一条记录显示为'暂停'。

但是使用obsStatus!='暂停'我根本没有记录。

有什么想法吗?

我也尝试过:

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"obsSchoolName == '%@' AND obsStatus != 'paused'", currentSchool];

NOT(obsStatus == 'paused')
obsStatus <> 'paused'

1 个答案:

答案 0 :(得分:1)

删除学校名称替换周围的单引号。 (@Tony正确地做到了这一点,但错误地认为替换是使用动态属性)。

NSDictionary *r0 = @{ @"obsSchoolName": @"UCLA", @"obsStatus":@"not paused" };
NSDictionary *r1 = @{ @"obsSchoolName": @"UCLA", @"obsStatus":@"not paused" };
NSDictionary *r2 = @{ @"obsSchoolName": @"UCLA", @"obsStatus":@"paused" };
NSDictionary *r3 = @{ @"obsSchoolName": @"UCLA", @"obsStatus":@"not paused" };
NSDictionary *r4 = @{ @"obsSchoolName": @"USC", @"obsStatus":@"not paused" };
NSArray *records = @[r0, r1, r2, r3, r4];

NSString *currentSchool = @"UCLA";
// note: NOT obsSchoolName == '%@'
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"obsSchoolName == %@ AND obsStatus != 'paused'", currentSchool];
NSArray *filtered = [records filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filtered);