2010-12-05 5 views
1

私はperformSelector:withObjectを実行したいですが、オブジェクトがCGFloatであるところです。実際にはオブジェクトではありません。これどうやってするの?performSelector:withObject :,オブジェクトではありません

私がセレクタを実行しているオブジェクトは私のものではなく、変更できません。

例えば

[xyz performSelector:@selector(setOffset:) withObject:2]; 

(投稿後私はわずかにこれに必要なものに変更:。

[xyz performSelector:@selector(setOffset:) withObject:CGSizeMake(2,0)]; 

答えて

3

、および:

+2

NSInvocationを非オブジェクト型で設定して使用する方法については、この質問のコードを参照してください:http://stackoverflow.com/questions/2716143/sel-performselector-and-arguments –

0

あなたがメッセージにオブジェクトを必要とする、私はこのような何かを行うために必要てきたときに、単純なコンテナクラスを作成し、インスタンスにデータを入れて、必要に応じてセレクタ(多くの場合@selector(doIt :))を実行します。

4.xをターゲットにできる場合は、 、また、typiカリー。渡された(あなたがやろうとしている正確に何についての詳細を知らなくても、任意のより具体的な取得するのは難しい。)

+1

私はあなたが誤解していると思います。彼にメッセージするオブジェクトがあるように聞こえますが、オブジェクトのメソッドへの引数(通常は "withオブジェクト"引数として渡します)は浮動小数点です。 – Chuck

+0

Yah - 私はあなたが二番目の考えを正しくしていると思います。 – bbum

0

オブジェクトがCGFloatです。実際にはオブジェクトではありません。

すぐ後に書いたように、あなたがオブジェクトを渡さしている場合CGFloatは(floatまたはdouble)プリミティブtypedef「編であるとして、それは、CGFloatすることはできません。

数字の値をオブジェクトとして渡したとしたら、何とかNSNumberが渡された可能性があります。

あなたの質問に文脈がないので、確かな方法はありません。あなたはオーバーコントロールを持っていないオブジェクトに対して任意のセレクタを起動しようとしている場合は、セレクタ、目標を設定するためにNSInvocationを使用することができ、

[NSNumber numberWithFloat:(float)value] 
+0

申し訳ありません "合格"という言葉が混乱していると思います。私はしたい '[performSelector:@selector(someThing :) withObject:1.0f]' –

-2

あなたは使用することができますメソッドが実行された後の戻り値を取得します。

しかし、一般的には、より簡単な解決策があります。

+1

これはすごくうまくいかないでしょう。浮動小数点を期待する関数は、あなたがNSNumberを渡してあなたのためにそれをラップしていることを検出できません。だからあなたは、ポインタの値と同じビットパターンでゴミフロートを得るでしょう。 – Chuck

+2

私はセレクタがユーザによって作成されたと仮定し、唯一の問題はperformSelector:withObject:call –

+0

でした。あなたの回答を今編集したら、私は投票を中止します。 –

0

トライ使用IMP(メソッドの実装の開始へのポインタ。)

SEL setOffsetSEL = @selector(setOffset:); 
IMP setOffsetIMP = [XYZClass instanceMethodForSelector:setOffsetSEL]; 
setOffsetIMP(xyz, setOffsetSEL, 2); 
関連する問題