2011-07-19 14 views
1

何らかの理由で、このNSStringを整数に変換すると、完全にランダムな(一貫した)番号が得られます。問題NSStringをIntに変換する

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // do something with the data 
    // receivedData is declared as a method instance elsewhere 
    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]); 

    // release the connection, and the data object 
    [connection release]; 

    debtString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 

    NSLog(@"String form: %@", debtString); 
    [receivedData release]; 

    int debtInt = [debtString intValue]; 
    NSLog(@"Integer form: %i", debtInt); 

} 

と、これは私のコンソール出力です:

2011-07-19 11:43:18.319 National Debt[50675:207] Succeeded! Received 14 bytes of data 
2011-07-19 11:43:18.320 National Debt[50675:207] String form: 14342943000000 
2011-07-19 11:43:18.320 National Debt[50675:207] Integer form: 2147483647 

私はNSLog(@"Integer form: %i", debtInt);行にブレークポイントを置いて、上記の行でdebtString値を上にマウスを移動した場合、無効な要約があります。私が考えているのは、それが変換される前にdebtStringをリリースしているということだけですが、これは明らかに真実ではありません。

+5

私たちの国家債務は、unsigned int!の記憶容量を超えている可能性がありますか?まあ、私は気になるでしょう。 – Perception

+0

http://stackoverflow.com/questions/2107544/types-in-objective-c-on-iphone – albertamg

答えて

4

文字列のint値がintの最大値を超えています。そのため、2.147.483.647であるintの最大値を表示します

+0

どうすればこの問題を回避できますか? –

+1

"長いロング"を試してください。 NSStringは[debtString longLongValue]を持っています – joern

+0

'int debtInt = [debtString longLongValue]; NSLog(@ "Integer form:%lli"、debtInt); 'returns' 2011-07-19 12:31:52.396国債[51367:207]文字列形式:14342943000000 2011-07-19 12:31:52.397国債[51367:207]整数形式:432424662392489408' –

関連する問題