にIDにBOOLキャストTRUE "をid型に変換しますか?また、iOS 5のXcodeでARCメモリ管理を使用しています。これは私のコードでのObjective-C
10
A
答えて
20
NSNumber
を渡してください。 boolNumber = [NSNumber numberWithBool:TRUE]
を使用してください。あなたのメソッドは次のように定義する必要があります:
-(void)setVariablePremierAffichage:(NSNumber *)boolNumber
{
BOOL value = [boolNumber boolValue];
// do something
}
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
答えが正しいか、それをキャスト。しかし、このようなことを強制するためにフープを飛び越すのではなく、最初に 'performoSelectorOnMainThread'をなぜ使用しているのか自分自身に尋ねるべきでしょうか?どうして '[delegate setVariablePremierAffichage:YES]'を直接使うのではないのですか? – Abizern
@Abizem、あなたは文脈によって正しいです。 OPはこれを別のスレッドから呼び出すかもしれません。その場合でも、 'performSelectorOnMainThread:'の代わりに 'dispatch_async'を使うと、NSNumberを使ってメソッドをw/oで呼び出すことができます。しかし、私はこれを「跳躍」と呼んでいません。状況に応じて、合理的な実装の選択です。 – XJones