Почему NSDecimalNumber в строке NSString? - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть объект, который был разобран в NSString, и когда я прослеживаю имя класса, он говорит NCDecimalNumber. Зачем? (Я понимаю, NSString - это кластер, но все еще не понимаю, почему NSDecimalNumber будет частью того, что стоит за кластером)

Следующий пост задает аналогичный вопрос, но никто не отвечает на вопрос, почему. Преобразование NSDecimalNumber в NSString

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

Похоже, что декодер декодирует число в NSDecimalNumber (и в NSString s).

Помните, что Objective-C равен C, поэтому вы можете эффективно присвоить указателю все, что вам нужно, чтобы убедиться, что типы соответствуют.Вот почему вы можете назначить объект типа NSNumber указателю, объявленному как тип NSString*.Как видите, кластеры классов не имеют к этому никакого отношения.

Поэтому, прежде чем присваивать свой объект переменной, вы должны проверить класс или, в качестве альтернативы, просто присвоить объект указателю типаid (который может содержать любой объект).

Если вам нужно работать с объектами на основе их типа, вы можете сделать что-то вроде этого:

id obj = //...

if ( [obj isKindOfClass: [NSString class]] ) {

}
else if ( [obj isKindOfClass: [NSNumber class]] ) {

}
else {

}
2 голосов
/ 25 февраля 2012

Попробуйте использовать это:

NSString *string = [[NSStrig alloc] initWithFormat:@"%@", [DecimalNumber stringValue]];

Надеюсь, что это поможет вам.

...