132

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"];
pkamb
  • 33,281
  • 23
  • 160
  • 191
suse
  • 10,503
  • 23
  • 79
  • 113

5 Answers5

207

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

NSNumber *number = [dict objectForKey:@"integer"];
int intValue = [number intValue];
pkamb
  • 33,281
  • 23
  • 160
  • 191
Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143
62

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];
Max Seelemann
  • 9,344
  • 4
  • 34
  • 40
4

Use the NSNumber method intValue

Here is Apple reference documentation

rano
  • 5,616
  • 4
  • 40
  • 66
1

A less verbose approach:

int number = [dict[@"integer"] intValue];
pkamb
  • 33,281
  • 23
  • 160
  • 191
baskInEminence
  • 710
  • 11
  • 26
1

A tested one-liner:

int number = ((NSNumber*)[dict objectForKey:@"integer"]).intValue;
Giorgio Barchiesi
  • 6,109
  • 3
  • 32
  • 36