2017-12-20 6 views
0

Ich habe ein sehr einfaches Stück Code, der beim Festlegen der NSDecimalNumber abstürzt.Warum schlägt diese NSDecimalNumber-Anweisung aus der NSString-Zuweisung fehl?

sieht der Code wie dieser

NSDecimalNumber *price = nil; 
NSString *variantPrice = nil; 
variantPrice = fcVariantRow[@"fcVariantPrice"]; 
price = [NSDecimalNumber decimalNumberWithString:variantPrice]; 

Es stürzt ab, wenn der Wert der Variablen Preis mit dem folgenden Crash info Zuordnung

2017-12-20 15:26:11.523917+0800 NWMPos[28837:18554790] -[__NSCFNumber 

length]: unrecognized selector sent to instance 0xb000000000000635 
2017-12-20 15:26:11.525159+0800 NWMPos[28837:18554790] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0xb000000000000635' 
*** First throw call stack: 
(0x187151d04 0x1863a0528 0x18715f1c8 0x1871576b0 0x18703d01c 0x187b6ceac 0x187b6aa38 0x187b6b0a0 0x1041131a0 0x1905bd608 0x1905bd588 0x104d9f83c 0x104d9d438 0x1905bd608 0x1905bd588 0x1905a82f0 0x1905bce7c 0x1905bc99c 0x1905b7e6c 0x190589378 0x190ed685c 0x190ed8de8 0x190ed1d04 0x1870fa2e8 0x1870fa268 0x1870f9af0 0x1870f76c8 0x187017fb8 0x188eaff84 0x1905ec2e8 0x1041151e8 0x186b3a56c) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Die Debuggt zeigt mir, dass die NSString einen korrekten Wert hat wie folgt

017-12-20 15:26:11.523626+0800 NWMPos[28837:18554790] Jongel 4 = 99 

99 ist der Wert des NSString

Warum stürzt es ab?

+0

'variantPrice' scheint ein' NSNumber' zu sein, nicht eine 'NSString' – Larme

+0

Ja, das war es, es zwingt string sein NSString mit [NSString: @"% @ ", fcVariantRow [@" fcVariantPrice "]]; Das Problem wurde behoben, ich verstehe nicht wirklich, warum es gezwungen werden muss, NSString zu sein, wenn es einer NSString-Variablen zugewiesen wird –

+0

Da "Casting" oder das Zuweisen eines Zeigers den Wert nicht transformiert, sind Sie in Ihrem Fall gerade einen Zeiger zuweisen. – Larme

Antwort

0
fcVariantRow[@"fcVariantPrice"] returns NSNumber type. 

nur verwenden

price = (NSDecimalNumber*) fcVariantRow[@"fcVariantPrice"]; 
+0

Wird beim Umwandeln des Werts 'NSNumber' in' NSDecimalNumber' der Wert umgewandelt? – Willeke

Verwandte Themen