私は、なぜ私が最初から文字列であるときに変数を再キャストする必要があるのか理解する助けが必要だと思っていました。ここでNSStringはなぜそれを「忘れる」のですか?
はコードです:
+ (BOOL)hasOperandComponents:(NSString *)operandToTest
{
NSArray *componentsOfOperand = [[NSString stringWithFormat:@"%@",operandToTest] componentsSeparatedByString:@" "];
if (componentsOfOperand.count>1) return YES; return NO;
}
私は「stringWithFormat」に埋め込まれたコールを使用しない場合、私はむしろ一般的なエラーが発生します。
-[__NSCFNumber componentsSeparatedByString:]: unrecognized selector sent to instance
私は答えを見つけることができました私のoperandToTestがNSStringであり、_NSCFNumberになっていることを「忘れている」ように見える理由について、このエラーが意味するものとそれに伴う回避方法(上記の私のコードを参照してください)は他のQとAを検索しています。
これはクラスメソッドなので疑問がありますが、NSString * operandToTestの特定のインスタンスがクラスメソッドに渡されるとどうなるのですか?
助けてください?
operandToTestが実際にはNSStringであることを完全に確信していますか?あなたはNSNumberをどこかに渡していませんか?また、ゾンビを有効にして実行しようとしましたか? –
デバッガで停止し、 'print operandToTest'を実行することができます。 '$ 1 =(NSNumber *)0x12345678'や' $ 1 =(NSString *)0x12345678'のようなものでなければなりません。それはオブジェクトが実際に何であるかを教えてくれるでしょう。 – user1118321
渡された値が数値であることがあります。私は数字、演算子、変数のid * NS配列を食べていますが、渡す変数は次のように設定されています。 'NSString * secondOperand = [self descriptionOfTopOfStack:stack];' 私はすでにすべてをストリングにキャストしていませんか? –