Does -[NSOrderedSet indexesOfObjectsPassingTest:] really return either an NSIndexSet or NSNotFound?

StackOverflow https://stackoverflow.com/questions/17093872

Question

I have this code:

NSIndexSet *indexes = [anOrderedSet indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
        if([self testObj: obj]) return YES;
        else return NO;
    }];

    if(indexes == NSNotFound) NSLog(@"No objects were found passing the test");

And this causes a warning from Xcode stating "Comparison between pointer and integer ('NSIndexSet *' and 'int')". And I totally agree with Xcode on this one.

However, the return value of the function is of type NSIndexSet* and the Apple documentation (http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html) states:

Return Value
The index of the corresponding value in the ordered set that passes the test specified by predicate. If no objects in the ordered set pass the test, returns NSNotFound.."

So what's the deal with returning NSNotFound (which is an NSInteger) when the return type of the function is a pointer to NSIndexSet? Is it safe to suppress the warning by changing the comparison to:

if(indexes == (NSIndexSet*) NSNotFound) NSLog(@"No objects were found passing the test");

Because, theoretically, indexes could be a valid returned NSIndexSet pointer that just happens to point to a memory address equal to NSNotFound, correct?

Was it helpful?

Solution 2

Apparently the Apple documentation is incorrect.

In my tests, I am finding that if no objects in the ordered set pass the test, then the returned object is an NSIndexSet of count equal to zero.

Thus, the correct test is:

if(indexes.count == 0) NSLog(@"No objects were found passing the test");

OTHER TIPS

I’m afraid the documentation is wrong.

You should check against an empty NSIndexSet:

if ([indexes count] == 0) NSLog(@"No object were found passing the test");

You should probably open a bug report with Apple.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top