这很奇怪。
为iPhone开发我有一个NSString:
distanceFromTargetString = @"6178266.000000"
// this is not actually code, but a value taken from elsewhere. It is a proper NSString though.
当我使用这个
时NSArray *listItems = [distanceFromTargetString componentsSeparatedByString:@"."];
distanceFromTargetString = [listItems objectAtIndex:0];
或者
[distanceFromTarget setText: distanceFromTargetString];
我得到这样的东西
-[NSDecimalNumber isEqualToString:]: unrecognized selector sent to instance 0x1cac40
2011-07-21 14:29:24.226 AssassinBeta[7230:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSDecimalNumber isEqualToString:]: unrecognized selector sent to instance 0x1cac40'
有什么想法吗?
答案 0 :(得分:2)
在某些时候,您要将NSDecimalNumber
分配给distanceFromTargetString
而不是NSString
。在Objective C中没有对赋值进行运行时类型检查,因此这完全是“合法的”:
NSDecimalNumber *number = [NSDecimalNumber ....];
[array addObject:number];
NSString *string = [array lastObject];
在您尝试将NSString
方法发送到string
之前,上述操作不会生成任何错误或警告,此时您将收到异常(崩溃),如上所示。
对您分配distanceFromTargetString
的所有位置以及您使用NSDecimalNumber
的任何位置进行审核。你正在某个地方穿越溪流。
答案 1 :(得分:1)
您在某个地方呼叫isEqualToString
并以NSDecimalNumber
作为接收方。什么是distanceFromTarget
?这是NSDecimalNumber
吗?
首先应该有效。
答案 2 :(得分:1)
你可以尝试:
NSInteger i = [distanceFromTargetString integerValue];
NSString s = [NSString stringWithFormat:@"%d", i];
// you got your string
答案 3 :(得分:0)
您可以尝试在
行设置断点[distanceFromTarget setText: distanceFromTargetString];
并查看distanceFromTargetString实际上是NSString
。
如上所述,NSNumber
以某种方式潜入某个地方。