Search code examples
objective-cjsonnsstringnsnumber

What's the real type? NSString or NSNumber


I have a NSDictionary that contains data converted from json data, like {"message_id":21}. then I use NSNumber *message_id = [dictionary valueForKey:@"message_id"] to get the data.

but when I use this message_id,

Message *message = [NSEntityDescription ....
message.messageId = message_id;

I got the runtime error, assigning _NSCFString to NSNumber,

so I have to use NSNumberFormatter to do the conversion.

NSString *messageId = [dictionary valueForKey:@"message_id"];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterNoStyle];
message.messageId = [f numberFromString:messageId];

this code works.

but when I was debugging, I saw message_id of

NSNumber *message_id = [dictionary valueForKey:@"message_id"]

has a valid value, 21.

Can anyone see the problem here?


Solution

  • You are trying to save a NSString to a NSNumber. If you want it as an NSNumber you can do:

    NSNumber *message_id = [NSNumber numberWithInt:[[dictionary valueForKey:@"message_id"] intValue]];
    

    This should solve your problem.