2012-01-26 17 views
0

いくつかの方法があります。NSStringによって作成されたNSNArrayでNSNumberを操作する方法

....{ 
NSString *mean = @"1:1:1:1:1:1:1:1:1"; 
tab = [self moveSourceArrayToDestinationArray:mean]; 
....} 



-(NSArray*)moveSourceArrayToDestinationArray:(NSString*)sourceArray{ 
NSArray *destinationArray = [sourceArray componentsSeparatedByString:@":"]; 

for (NSNumber *number in destinationArray) { 
    sum += [number doubleValue]; 
} 
NSLog(@"%d", [destinationArray objectAtIndex:1] * 5); // invalid operands to binary expression ('id' and 'int') 
return destinationArray; 
} 

NSArrayの数値に対して数学演算を行うにはどうすればよいですか?

+0

NSArrayにはまだNSNumbersがあります。数学をするには、それらを変換する必要があります。 –

+0

このコードには実際のNSNumberオブジェクトはありません。それらはNSStringsです。彼はちょうどセレクターの名前で幸運だった。 – UIAdam

答えて

1

最も簡単なことは、NSNumberオブジェクトから数値を取得することです。以前のコードスニペットで既に行ったことです。例えば、試してみてください。

NSLog(@"%d", [[destinationArray objectAtIndex:1] intValue] * 5); 

というタイトルのセクションの下のNSNumberドキュメントで数値アクセス関数の一覧を見る「数値をアクセスします。」

+0

シンプルでありがとうございます。 ) –

+0

ここには実際のNSNumberオブジェクトはありません。 – UIAdam

+0

お元気ですか。私はfor()ループを見ただけで、destinationArrayの構築方法については見ていませんでした。はい、これは完全な混乱です...アダムのアドバイスにも従ってください。 –

1

[destionationArray objectAtIndex:index]のオブジェクトもNSNumberになる可能性があります。したがって、この時点で[[destinationArray objectAtIndex:index] doubleValue]にする必要があります。

+0

助けてくれてありがとうございます。 ) –

2

コード内のNSNumberへの参照は間違いであり、コードが認識できないセレクタ例外をスローしなかったことは幸いです。 destinationArrayはNSStringの配列であり、NSNumberは配列ではありません。 NSStringNSNumberの両方がdoubleValueintValueの方法を持っているだけです。だからあなたのループに[number doubleValue]と言うとき、実際には[NSString doubleValue]と呼ぶことになりますが、それでももちろんあなたが望む番号を返します。しかし[number shortValue]を呼び出そうとした場合、shortValueNSNumberにのみ存在し、NSStringではなくセレクタであるため、コードは例外をスローして動作しません。

この回答の道徳は、コード内のNSNumberへの参照を削除するか、実際にdestinationArrayのオブジェクトをNSNumberに変換することです。そうしないと、より多くの問題にぶつかる危険があります。

+0

ありがとうございました。 ) –