0

ちょっとした背景: iOS のプログラミング方法を独学で学んでいます。だから私は初心者です。この問題に頭を悩ませることはできません。

基本的にボタンで変数を受け取ることになっているメソッドがあり、その変数を変数変換メソッドに渡します。

変数変換メソッドは、定義済みを通過しNSDictionary、基本的に変数を検索して、関連付けられた値を返すことになっています。

その後、表示はその関連付けられた変数で更新されます。

つまり、x の値が 2 の場合、x を押すと、画面には 2 と表示されます。NSDictionary などを独学で学ぼうとしているだけなので、どんな助けも素晴らしいものになるでしょう。

- (IBAction)variablePressed:(id)sender {
    NSDictionary *values = [NSDictionary dictionaryWithObjectsAndKeys: 
                            [NSNumber numberWithInt:2], @"x",
                            [NSNumber numberWithInt:4], @"y",
                            [NSNumber numberWithInt:6], @"z", nil];
    double newValue = [self.brain convertVariable:[sender currentTitle] usingVariableValues:values];

  // NSLog([NSString stringWithFormat:@"%d", newValue]);
}

の行でコードがクラッシュしNSLogます。うまくいかないのでコメントアウトしました。

4

2 に答える 2

2

NSLog ステートメントを次のように変更してみてください...

NSLog(@"newValue is %f", newValue);

NSLog は引数置換を実行するため、stringWithFormat は必要ありません。

于 2012-04-07T09:39:23.250 に答える
0

stringWithFormat で変数の正しい置換を使用していません。数字として読み取ろうとしています。これにより、そのメモリの場所から読み取られるバイト数が正しくなくなり (または私が推測)、クラッシュが発生します (この部分は想定 xD ではありません)。%d は "double" を意味するように見えますが、実際には "digit" (int、short など) を意味します。%f (=float) に変更すれば問題ありません。

編集他の回答で述べたように、NSLog は stringWithFormat と同じように機能します (書式文字列と引数を直接受け取ります)。stringWithFormat を渡す必要はありません。実際、これを行うと、セキュリティで保護されていない可能性のある文字列に関するコンパイラの警告が発生します。

于 2012-04-07T12:23:53.413 に答える