16

I'm retrieving a key from an object that looks like this:

po obj
{
  TypeID = 3;
  TypeName = Asset;
}

The key value is being retrieved like this:

NSString *typeId = (NSString*)[obj objectForKey:@"TypeID"];

Rather than typeId being an NSString, it is an NSDecimalNumber. Why is that?

How do I convert it to an NSString?

4thSpace
  • 43,672
  • 97
  • 296
  • 475

5 Answers5

32

You need to use the stringWithFormat function:

NSString *typeId = [NSString stringWithFormat:@"%@", [obj objectForKey:@"TypeID"]];

or stringValue:

NSString *typeId = [[obj objectForKey:@"TypeID"] stringValue];
Jeff B
  • 29,943
  • 7
  • 61
  • 90
4

This should work:

NSString *typeId = [[obj objectForKey:@"TypeID"] stringValue];
Michael
  • 3,498
  • 5
  • 27
  • 32
1

If you want to get string value, just use "description". It works fine even if returned type is NSDecimalNumber, or NSString, or whatever:

NSString *typeId = [[obj objectForKey:@"TypeID"] description];
Cao Huu Loc
  • 1,569
  • 15
  • 18
1

Since this is the top search result and I don't see a question for NSDecimalNumber to String in Swift, here it is. This will show the localized decimal separator and all decimal places with a non-zero value.

let string = decimalNumber.description(withLocale: Locale.current)

blwinters
  • 1,911
  • 19
  • 40
-1

Use this to convert NSDecimalNumber to NSString:

NSDecimalNumber* dec1;
NSString* str;

str = dec1.stringValue;

Use this to convert NSString to NSDecimalNumber:

NSString* string1 = @"Stack overflow 123";
NSDecimalNumber* dec;

dec = (NSDecimalNumber *)string1;
taus-iDeveloper
  • 681
  • 2
  • 8
  • 22
  • 2
    You can't just cast an `NSString` to an `NSDecimalNumber`, they are different type's and you'll crash if you try to use `NSDecimalNumber` methods on that pointer. – axiixc Apr 30 '14 at 04:31