Похоже, что декодер декодирует число в NSDecimalNumber
(и в NSString
s).
Помните, что Objective-C равен C, поэтому вы можете эффективно присвоить указателю все, что вам нужно, чтобы убедиться, что типы соответствуют.Вот почему вы можете назначить объект типа NSNumber
указателю, объявленному как тип NSString*
.Как видите, кластеры классов не имеют к этому никакого отношения.
Поэтому, прежде чем присваивать свой объект переменной, вы должны проверить класс или, в качестве альтернативы, просто присвоить объект указателю типаid
(который может содержать любой объект).
Если вам нужно работать с объектами на основе их типа, вы можете сделать что-то вроде этого:
id obj = //...
if ( [obj isKindOfClass: [NSString class]] ) {
}
else if ( [obj isKindOfClass: [NSNumber class]] ) {
}
else {
}