Add NSUInteger to NSMutableArray

不羁岁月 提交于 2019-11-30 15:46:21

NSArray (along with its subclass NSMutableArray) only supports objects, you cannot add native values to it.

Check out the signature of -addObject:

- (void)addObject:(id)anObject

As you can see it expects id as argument, which roughly means any object.

So you have to wrap your integer in a NSNumber instance as follows

[self.flipCardIndexes addObject:@(index)];

where @(index) is syntactic sugar for [NSNumber numberWithInt:index].

Then, in order to convert it back to NSUInteger when extracting it from the array, you have to "unwrap" it as follows

NSUInteger index = [self.flipCardIndexes[0] integerValue]; // 0 as example

You can only add objects to NSMutableArrays. The addObject accepts objects of type id, which means it will accept an object.

NSIntegers and NSUIntegers, however, are not objects. They are just defined to be C style variables.

#if __LP64__ || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    typedef unsigned long NSUInteger;
#else
    typedef int NSInteger;
    typedef unsigned int NSUInteger;
#endif

As you can see, they are just defined to be ints and longs based on a typedef macro.

To add this to your array, you need to first convert it to an object. NSNumber is the Objective C class that allows you to store a number of any type. To make the NSNumber, you will want to you the numberWithInt method, passing your variable as the parameter.

NSNumber *number = [NSNumber numberWithInt:card];

Now that your variable is wrapped in an object, you can add it to the array.

[self.flipCardIndexes addObject:number];

Finally, if you want to retrieve the element at a future time, you have to remove the object and then convert it back to an int value you can use. Call

NSNumber *number = [self.flipCardIndexes objectAtIndex:index];

Where index is the index of the card you are trying to retrieve. Next, you have to convert this value to an integer by calling integerValue.

NSUInteger *value = [number integerValue];
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!