2011-12-19 12 views
10

にIDにBOOLキャストTRUE "をid型に変換しますか?また、iOS 5のXcodeでARCメモリ管理を使用しています。これは私のコードでのObjective-C

+0

答えが正しいか、それをキャスト。しかし、このようなことを強制するためにフープを飛び越すのではなく、最初に 'performoSelectorOnMainThread'をなぜ使用しているのか自分自身に尋ねるべきでしょうか?どうして '[delegate setVariablePremierAffichage:YES]'を直接使うのではないのですか? – Abizern

+1

@Abizem、あなたは文脈によって正しいです。 OPはこれを別のスレッドから呼び出すかもしれません。その場合でも、 'performSelectorOnMainThread:'の代わりに 'dispatch_async'を使うと、NSNumberを使ってメソッドをw/oで呼び出すことができます。しかし、私はこれを「跳躍」と呼んでいません。状況に応じて、合理的な実装の選択です。 – XJones

答えて

20

NSNumberを渡してください。 boolNumber = [NSNumber numberWithBool:TRUE]を使用してください。あなたのメソッドは次のように定義する必要があります:

-(void)setVariablePremierAffichage:(NSNumber *)boolNumber 
{ 
    BOOL value = [boolNumber boolValue]; 
    // do something 
} 
+2

BOOLのObjective-C規約が 'YES'で、' TRUE'ではなく 'NO'で、偽では – Abizern

+0

TRUE/FALSEであるので、' [NSNumber numberWithBool:YES] 'と言っていると思います。 – XJones

+2

はい、それは動作しますが、慣例があり、YES/NOはObjective-Cのものです。 – Abizern

0

プリミティブをIDにキャストする方法はありません。 performSelectorなどのメソッドを動的に呼び出す必要がある場合は、NSInvocationを使用する必要があります。

NSMethodSignature *sig = [self methodSignatureForSelector:@selector(setVariablePremierAffichage:)]; 
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; 
BOOL yes = YES; 
[invocation setArgument:&yes atIndex:2]; 
[invocation setTarget:self]; 
[invocation setSelector:@selector(setVariablePremierAffichage:)]; 
[invocation invoke]; 

乾杯!

4

使用CFbooleanreference、あなたが得ている

[delegate performSelectorOnMainThread:@selector(setVariablePremierAffichage:) withObject:(id)kCFBooleanTrue waitUntilDone:NO]; 
+0

共有のためのThanx! – smileBot