0

読みやすい電話番号として書式設定された電話番号を持っています。つまり、(123) 123-4567

ただし、その電話番号をコードで使用する場合は、その文字列を数値変数 ( などint)に解析する必要があります。

ただし、[string intValue]; 機能しません-intValue以前のプロジェクトで約100万回使用しましたが、すべて問題ありませんでしたが、ここでは、渡すすべての文字列が同じランダムな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;
}

次に、このメソッドを呼び出すと:

NSLog(@"%i", [self processPhoneNumber:self.phoneNumberTextField.text]);

私は得る: 2147483647. このメソッドに与えるすべての入力は次を返します。2147483647

4

2 に答える 2

5

CRDがすでに説明したように、あなたはその文字列を値を保持するには小さすぎるタイプに変換しようとしており、そのタイプの可能な最大値を取り戻しています。

しかし、あなたの本当の問題はもっと深いです。電話の「番号」は実際には番号ではありません。数量を表すものではありません。1つで算術演算を実行することは決してありません。これは実際には数字の文字列であり、そのように処理する必要があります。変換しないでください。文字列を操作するだけです。

電話番号を表す正しい方法は何ですか?も参照してください。

于 2012-10-21T19:37:33.033 に答える
4

2147483647 は、オーバーフロー時に返される INT_MAX です。あなたの電話番号はどのくらいの大きさintですか?多分あなたは使うべきlongLongValueですか?

于 2012-10-21T19:25:04.480 に答える