You must compare the values ββof NSNumbers, not the objects.
You can use objectsPassingTest:
Example:
NSMutableSet *set = [[NSMutableSet alloc] init]; NSNumber *num1 = [NSNumber numberWithInt:5]; NSNumber *num2 = [NSNumber numberWithInt:5]; NSNumber *num3 = [NSNumber numberWithInt:3]; [set addObject:num1]; NSSet *filteredSet; filteredSet = [set objectsPassingTest:^(id obj,BOOL *stop){ return [obj isEqualToNumber:num2]; }]; NSLog(@"Contains num2: %@", (filteredSet.count == 1) ? @"YES" : @"NO"); filteredSet = [set objectsPassingTest:^(id obj,BOOL *stop){ return [obj isEqualToNumber:num3]; }]; NSLog(@"Contains num3: %@", (filteredSet.count == 1) ? @"YES" : @"NO");
NSLog Output:
Contains num2: YES Contains num3: NO
Or, if you want to use predicates:
filteredSet = [set filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"SELF == %@", num2]]; NSLog(@"Contains num2: %@", (filteredSet.count == 1) ? @"YES" : @"NO"); filteredSet = [set filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"SELF == %@", num3]]; NSLog(@"Contains num3: %@", (filteredSet.count == 1) ? @"YES" : @"NO");
source share