试图从NSString中删除小数

时间:2011-07-21 13:34:54

标签: objective-c cocoa-touch nsstring

这很奇怪。

为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'

有什么想法吗?

4 个答案:

答案 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以某种方式潜入某个地方。