Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSString intValue不用于检索电话号码_Objective C_Cocoa Touch_Nsstring_Type Conversion_Phone Number - Fatal编程技术网

Objective c NSString intValue不用于检索电话号码

Objective c NSString intValue不用于检索电话号码,objective-c,cocoa-touch,nsstring,type-conversion,phone-number,Objective C,Cocoa Touch,Nsstring,Type Conversion,Phone Number,我有一个格式化为易读电话号码的电话号码,即,(123)123-4567 但是,当我想在代码中使用该电话号码时,我需要将该字符串解析为数字变量(例如int) 但是,[string intValue]不起作用-我在以前的项目中使用了intValue大约一百万次,都没有问题,但是在这里,我传入的每个字符串都会得到相同的、随机的int: - (int)processPhoneNumber:(NSString *)phoneNumber { NSMutableString *strippedS

我有一个格式化为易读电话号码的电话号码,即,
(123)123-4567

但是,当我想在代码中使用该电话号码时,我需要将该字符串解析为数字变量(例如
int

但是,
[string intValue]不起作用-我在以前的项目中使用了
intValue
大约一百万次,都没有问题,但是在这里,我传入的每个字符串都会得到相同的、随机的
int

- (int)processPhoneNumber:(NSString *)phoneNumber {
      NSMutableString *strippedString = [NSMutableString stringWithCapacity:10];

      for (int i=0; i<[phoneNumber length]; i++) {
           if (isdigit([phoneNumber characterAtIndex:i])) {
                  [strippedString appendFormat:@"%c",[phoneNumber characterAtIndex:i]];
           }
      }

     NSLog(@"clean string-- %@", strippedString);

     int phoneNumberInt = [strippedString intValue];

     NSLog(@"**** %d\n &i", phoneNumberInt, phoneNumberInt);

     return phoneNumberInt;
}

我得到:
2147483647
我给这个方法的每个输入返回:
2147483647

2147483647是溢出时返回的INT\u MAX。您的电话号码有多大,是否可以放入
int
?也许您应该使用
longValue

,正如CRD已经解释的那样,您正在尝试将该字符串转换为一个太小而无法容纳该值的类型,并且您正在获取该类型的最大可能值

然而,你真正的问题是更深层次的。电话号码并不是真正的号码。它不代表数量。你永远不会对一个人进行算术运算。实际上是一串数字,你应该这样处理。不要改变它;只要操作绳子就行了


另请参见?

我的电话号码是10位数字,因为这是溢出值。但是如果说区号是803,那是否意味着以803开头的10位数的数字会溢出?@Andrew-是的,它会溢出。您的
int
是32位有符号的。使用
long-long
(或
UInt64
等)获取64位无符号值。谢谢。我从来没有真正理解int、long、short、signed、unsigned等的区别。@Andrew-On Mac OS X上的
int
总是32位,
long
总是64位,
long
取决于编译方式。不同的系统使用不同的64位模式-请参阅。我建议您完全走错了方向。电话号码并不是真正的号码。它不代表数量。你永远不会对一个人进行算术运算。实际上是一串数字,你应该这样处理。看,我100%支持@Josh Caswell。在int表示法中,您甚至不知道是否需要在开始时调用某些“0”!您是否使用Xcode调试工具逐步检查了代码,以找出问题出现的地方?知道代码的哪一部分不能正常工作会有很大帮助。这是有道理的,我同意。我把它设为int,这样我可以很容易地调用它,但你的解释更有意义。如果你能把它写成一个答案,我会接受的
NSLog(@"%i", [self processPhoneNumber:self.phoneNumberTextField.text]);