Convert NSNumber to int in Objective-C

Objective CNsnumber

Objective C Problem Overview


I use [NSNumber numberWithInt:42] or @(42) to convert an int to NSNumber before adding it to an NSDictionary:

int intValue = 42;
NSNumber *numberValue = [NSNumber numberWithInt:intValue];
NSDictionary *dict = @{ @"integer" : numberValue };

When I retrieve the value from the NSDictionary, how can I transform it from NSNumber back to int?

NSNumber *number = dict[@"integer"];
int *intNumber = // ...?

It throws an exception saying casting is required when I do it this way:

int number = (int)dict[@"integer"];

Objective C Solutions


Solution 1 - Objective C

Have a look at the documentation. Use the intValue method:

NSNumber *number = [dict objectForKey:@"integer"];
int intValue = [number intValue];

Solution 2 - Objective C

You should stick to the NSInteger data types when possible. So you'd create the number like that:

NSInteger myValue = 1;
NSNumber *number = [NSNumber numberWithInteger: myValue];

Decoding works with the integerValue method then:

NSInteger value = [number integerValue];

Solution 3 - Objective C

Use the NSNumber method intValue

Here is Apple reference documentation

Solution 4 - Objective C

A less verbose approach:

int number = [dict[@"integer"] intValue];

Solution 5 - Objective C

A tested one-liner:

int number = ((NSNumber*)[dict objectForKey:@"integer"]).intValue;

Attributions

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
QuestionsuseView Question on Stackoverflow
Solution 1 - Objective CFelix KlingView Answer on Stackoverflow
Solution 2 - Objective CMax SeelemannView Answer on Stackoverflow
Solution 3 - Objective CranoView Answer on Stackoverflow
Solution 4 - Objective CbaskInEminenceView Answer on Stackoverflow
Solution 5 - Objective CGiorgio BarchiesiView Answer on Stackoverflow