2012-04-27 15 views

答えて

5

intはオブジェクトではなくプリミティブ型なので、オブジェクトにintをラップする必要があります。例:

[self performSelectorOnMainThread:@selector(chooseURL:) 
         withObject:[NSNumber numberWithInt:myIndex] 
        waitUntilDone:YES]; 

もちろん、intの代わりにNSNumberを受け入れるようにchooseURL:メソッドを編集する必要があります。

int myInt = [myIndex intValue]; 
+0

素晴らしい!反対方向に行く方法はありますか?NSNumberをintに再度変換しますか? – Winston

+0

@ウィンストン:スティーブはすでにあなたに言った。彼の答えの最後の行です。 –

+0

ああ、そうです!私の悪い!ごめんなさい! – Winston

2

INT

【のNSNumber numberWithInt:ミント]からのNSNumberを作成します。

+0

素晴らしい!反対方向に行く方法はありますか?NSNumberをintに再度変換しますか? – Winston

+0

確かにです:int i = [myNumber integerValue]; – rooftop

1

のNSNumberオブジェクトとして分類することができるように[のNSNumberのnumberwithintを:myindex]:メインキューが常にオンである

dispatch_sync(dispatch_get_main_queue(), ^{ 
    [self chooseURL:myIndex]; 
}); 

2

performSelectorOnMainThread:...のGCDのバージョンを使用してアンラップする メインスレッド

すでにメインスレッドにいる間にdispatch_sync()を使用しないでください。デッドロックする可能性があります。

dispatch_queue_t mainQ = dispatch_get_main_queue(); 
if(mainQ != dispatch_get_current_queue()){ 
    dispatch_sync(mainQ, ^{ 
     [self chooseURL:myIndex]; 
    }); 
} 
else { 
    [self chooseURL:myIndex]; 
} 

waitUntilDone:NOについて、あなたは同じスレッドから使​​用する大丈夫であるdispatch_async()を使用することができます。必要に応じて確認してください。

+0

あなたの答えは素晴らしく、私はそれから多くを学んだ!そして、それは完全に動作します! – Winston

関連する問題