2

「withObject:」を使用してセレクターを介してフロートを渡そうとしていますが、オブジェクトのみを受け入れます。

[NSNumber numberWithFloat: ] を使用するように指示する解決策がありますが、フロートの値をいじっています。フロートの値の前後のテストを行っています。事前に0.0034324などの数値を取得しますが、その後はすべて0.0000000になります

[[self gameObjects] makeObjectsPerformSelector:@selector(update:) withObject: <what to put here>]];

前もって感謝します!

編集*

ここに文脈があります

-(void) tick:(float)dt{
    NSLog(@"%f",dt)
    [[self gameObjects] makeObjectsPerformSelector:@selector(update:) withObject:[NSNumber numberWithFloat:dt]];

}

上から出力された数値は0ではありません

しかし、セレクターメソッドから....

- (void)update:(float)dt{

    NSLog(@"%f",dt);

}

出力は0です

4

5 に答える 5

4

float を NSNumber でラップする必要があります。

NSNumber * num = [NSNumber numberWithFloat:5.5];

編集: rmaddy が指摘したように、NSNumber を使用する他の方法がいくつかあります *

NSNumber * num = @5.5f;
float someFloat = 5.5f;
NSNumber * num1 = @(someFloat);

OPへ、実際の問題を分析するのを助けるためにあなたのコードをもっと見る必要があります

新しいコンテキストに対応するための更新

ターゲット メソッドでは、予想される引数として (float) が予想されることを指定しています。関数に渡す変数の型を認識することが重要です。makeObjectsPerformSelector メソッドの最後の引数の前に withObject が付いていることに注意してください。これは、プリミティブ float ではなく、オブジェクトを渡していることを示しています。したがって、渡したいフロートを NSNumber にラップします。

NSNumber * numToPass = @(floatToWrap);
[[self gameObjects] makeObjectsPerformSelector:@selector(update:) withObject:numToPass]];

- (void)update:(NSNumber *)dt {

    NSLog(@"%f",dt.floatValue); // or [dt floatValue];

}

お役に立てれば

于 2013-07-13T00:29:25.383 に答える
0
[[self gameObjects] makeObjectsPerformSelector:@selector(update:) withObject:[NSNumber numberWithFloat:dt]];

float 引数を持つセレクターを呼び出します。update: 引数を NSNumber に変更し、その内部で NSNumber の floatValue を呼び出します

おそらく、この performSelector と NSNumber のすべてのビジネスよりも、gameObjects の配列に対して for-in ループを実行する方がよいでしょう。ループ内で update netheid を直接呼び出します。

于 2013-07-13T01:14:18.073 に答える