Getting Index of an Object from NSArray?


Iphone Problem Overview

i am trying to get index of an array through indexOfObject method as follows but when i try to log the value to test the index i get a garbage value.. for testing purposes i am having an array with values {57,56,58..} to get an index of lets say 56,

NSNumber *num = [NSNumber numberWithInteger:56];
NSInteger Aindex = [myArray indexOfObject:num];
NSLog(@" %d",Aindex);

the value i get is something like 2323421. what am i possibly doing wrong??

Iphone Solutions

Solution 1 - Iphone

The index returned by indexOfObject will be the first index for an occurence of your object. Equality is tested using isEqual method.
The garbage value you get is probably equal to NSNotFound.
Try testing anIndex against it. The number you are looking for isn't probably in your array :

NSNumber *num=[NSNumber numberWithInteger:56];
NSInteger anIndex=[myArray indexOfObject:num];
if(NSNotFound == anIndex) {
    NSLog(@"not found");

or log the content of the array to be sure :

NSLog(@"%@", myArray);

Solution 2 - Iphone


When an object is not found in the array the indexOfObject method does NOT return a 'garbage' value. Many systems return an index of -1 if the item is not found.

However, on IOS - because the indexOfObject returns an UNSIGNED int (aka NSUInteger) the returned index must be greater than or equal to zero. Since 'zero' is a valid index there is no way to indicate to the caller that the object was not found -- except by returning an agreed upon constant value that we all can test upon. This constant agreed upon value is called NSNotFound.

The method:

- (NSUInteger)indexOfObject:(id)anObject;

will return NSNotFound if the object was not in the array. NSNotFound is a very large POSITIVE integer (usually 1 minus the maximum int on the platform).

Solution 3 - Iphone

NSNumber *num1 = [NSNumber numberWithInt:56];
	NSNumber *num2 = [NSNumber numberWithInt:57];
	NSNumber *num3 = [NSNumber numberWithInt:58];
	NSMutableArray *myArray = [NSMutableArray arrayWithObjects:num1,num2,num3,nil];
	NSNumber *num=[NSNumber numberWithInteger:58];
	NSInteger Aindex=[myArray indexOfObject:num];
	NSLog(@" %d",Aindex);

Its giving the correct output, may be u have done something wrong with storing objects in ur array.

Solution 4 - Iphone

Try this:

NSArray's indexOfObject: method. Such as the following:

NSUInteger fooIndex = [someArray indexOfObject: someObject];

Solution 5 - Iphone

If you're using Swift and optionals make sure they are unwrapped. You cannot search the index of objects that are optionals.

Solution 6 - Iphone

I just checked. Its working fine for me. Check if your array has the particular number. It will return such garbage values if element is not present.

Solution 7 - Iphone

indexOfObject methord will get the index of the corresponding string in that array if the string is like @"Test" and you find like @"TEST" Now this will retun an index like a long number


All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionhemantView Question on Stackoverflow
Solution 1 - Iphoneuser866214View Answer on Stackoverflow
Solution 2 - IphonejoeView Answer on Stackoverflow
Solution 3 - IphoneiCoder4777View Answer on Stackoverflow
Solution 4 - IphoneRajesh LoganathanView Answer on Stackoverflow
Solution 5 - IphoneJosh O'ConnorView Answer on Stackoverflow
Solution 6 - Iphonevisakh7View Answer on Stackoverflow
Solution 7 - IphoneJayasabeenView Answer on Stackoverflow