これまでにこれが聞かれてきたと確信していますが、検索するキーワードがわかりません。メソッドが値を返すためにレスポンスを待つ方法を作る方法は?
は私がbool
返す関数validateConnection
を持っていると仮定します。この関数は、(ネットワークを使用して)サーバーへの呼び出しを行い、要求が成功した場合はtrue
を返します(これは単なる例です)。
私は応答がbool
を返すために戻るまで私の方法が待機する:それを達成するためにどのように?
ご協力いただければ幸いです。
これまでにこれが聞かれてきたと確信していますが、検索するキーワードがわかりません。メソッドが値を返すためにレスポンスを待つ方法を作る方法は?
は私がbool
返す関数validateConnection
を持っていると仮定します。この関数は、(ネットワークを使用して)サーバーへの呼び出しを行い、要求が成功した場合はtrue
を返します(これは単なる例です)。
私は応答がbool
を返すために戻るまで私の方法が待機する:それを達成するためにどのように?
ご協力いただければ幸いです。
そのブロックとバックの呼び出しを作成するためのサンプル方法で使用することができます。
-(void)callmethodwith:(NSString*)string withCompletion:(void(^)(BOOL success, NSError* error, id responce))completion
{
NSString *str =[NSString stringWithFormat:@"MY FUNTn CALLBACK %@",string];
if (completion){
dispatch_async(dispatch_get_main_queue(), ^{
completion(YES,nil,str); // here that call when method complete
});
}
}
をとあなたは、次のようにそれを呼び出すことができます。
[self callmethodwith:@"My new" withCompletion:^(BOOL success, NSError *error, id responce) {
if(success)
{
NSLog(@"==%@",responce); // here you get response once method camplet
}
}];
これは実際には正しい答えです。なぜ人々がUIをアップvしてしまったのか不思議。 – NSNoob
そのupvoteは親愛なる人と近くの人から来たので:P –
ありがとう!私が欲しかったものを正確に –
は、私は、メソッドが実行されると、それを止める方法がない、と思います。
ただし、解雇されていない場合はキャンセルできます。
次のようにします。
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(yourMethod) object:nil];
[self performSelector:@selector(yourMethod) withObject:nil afterDelay:5.0];
これはいいですが、正しいとマークされた方が良いです。ありがとう! –
AFNetworkingの成功と失敗の方法を使用して応答を待つことができます。また、あなたはperformSelectorOnMainThread
方法Block
次Introduction to Objective-C Blocks
によってブロックについての詳細を学ぶことができ呼び出さ
[yourViewController performSelectorOnMainThread:@selector(yourFunction:) withObject:nil
waitUntilDone:YES];
ブロックまたはCompletion Handlerを使用している間は、保持カウントに影響するため、クラスまたはビューの強い参照を使用していないことを確認してください。
ブロックまたは完了ハンドラでの作業中は、
__weak Class *weakSelf = self;
[manager communicateUsingGETMethod:@"www.google.com" parameterDictionary:@{} success:^(id successDicitoanary) {
// Call using weak reference.
[weakSelf handleSuccess];
} failure:^(NSError *error) {
[weakSelf handleFailure];
}];
ブロック、このような内部の弱い参照を使用すると、コードが読みやすくなります全体コードseparately.Thisを書いて、あなたは、としてあまりにサイクルを保持取り除くうあなたの参考のために、弱い参照して
をごcompletionCodeを呼び出している、あなたが完了ハンドラを使用することができますAvoid Strong Reference Cycles when Capturing self
なぜ否定的? サイクルを保持するのを気にしないでください??? –
用リンゴのドキュメントをお読みください。リクエストが完了したときにトリガする完全ハンドラを作成します。 –
正確には、正しい答えを見ると、それはブロックを使用していたことがわかります。ありがとう! –