我试图让以下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'
答案 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);