1. ホーム
  2. objective-c

[解決済み] CocoaでperformSelector:withObject:afterDelay:をプリミティブ型で使用する方法は?

2023-01-18 05:47:46

質問

質問 NSObject メソッド performSelector:withObject:afterDelay: を使うと、オブジェクトの引数を持つメソッドを一定時間後に呼び出すことができます。オブジェクト以外の引数を持つメソッド(ints、float、structs、オブジェクト以外のポインタなど)には使用することができません。

とは何ですか? 最もシンプルな メソッドで同じことを達成する最も簡単な方法は何ですか?私は、通常の performSelector:withObject: の場合、解決策は NSInvocation (を使うことです(ちなみにこれは本当に複雑です)。しかし、私は"delay"の部分をどのように処理するのかわかりません。

ありがとうございます。

どのように解決するのですか?

NSInvocationを使って、変更できないものを呼び出すために使用したものを紹介します。

SEL theSelector = NSSelectorFromString(@"setOrientation:animated:");
NSInvocation *anInvocation = [NSInvocation
            invocationWithMethodSignature:
            [MPMoviePlayerController instanceMethodSignatureForSelector:theSelector]];

[anInvocation setSelector:theSelector];
[anInvocation setTarget:theMovie];
UIInterfaceOrientation val = UIInterfaceOrientationPortrait;
BOOL anim = NO;
[anInvocation setArgument:&val atIndex:2];
[anInvocation setArgument:&anim atIndex:3];

[anInvocation performSelector:@selector(invoke) withObject:nil afterDelay:1];