2011-02-03 4 views
2

NSStringをバックグラウンドスレッドで返すセレクタを実行しようとしています。返されるNSStringは入力オブジェクトalbumlinkに依存します。バックグラウンドでセレクタを実行し、戻り値の文字列を取得

URLを短縮するのに時間がかかりますので、バックグラウンドで実行しています。

戻り文字列を取得する方法を教えていただけたら本当に感謝します。そのセレクタを実行するための

私のコードは次のとおりです。

[self performSelectorInBackground:@selector(shortenURL:) withObject:albumlink]; 

答えて

8
あなたはそれが実行されているスレッドの外で関数の戻り値を取得することはできません

、バックグラウンドスレッドで何かをやっての全体のポイントは、それがかかったということです。メインスレッドの通常の流れから外れるので、戻ってくる場所はありません。最も賢明なアプローチは、バックグラウンドで(NSOperationまたはGCDを通して直接)実行されるブロックを作成することです。メインスレッド - 後で値を格納する必要がある場合 - またはコードの1つのブランチでのみ使用される場合は、その値を使って何をしようとしているかを実行します。

+1

あなたができる - バックグラウンドスレッドは、メインスレッドでセレクタを実行していますその文字列を引数とします。 – Richard

+4

@リチャード:「あなたはできない」という過去の私の答えを読んだことがありますか?それは基本的に私が言ったことです。私が言ったことは、別のスレッドでメソッドを実行させても、通常は値を返すことです。 – Chuck

12

あなたは(のは-handleResponse:(NSString *)responseそれを呼びましょう)あなたのクラスの別のメソッドを書くことができ、その後、あなたが呼び出すことができるバックグラウンドにプロセスから:

[self performSelectorOnMainThread:@selector(handleResponse:) withObject:@"My response string" waitUntilDone:NO]; 
関連する問題