私はAFNetworkingライブラリを使用していましたが、問題が発生しました。私はGET関数を使ってリモートPHPファイルからデータを受け取る次のコードを使用しました。__blockを使用してもデータを保持できません
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
__block NSDictionary *data = nil;
[manager GET:@"..." parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
data = responseObject;
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
_objects = [[data allKeysForObject:@"type"]mutableCopy];
見ての通り、私は地元のNSDictionaryの変数を作成し、別のスタックオーバーフローのポストはに私に言ったように、ゼロに設定します。角かっこの中では、すべてがうまく見えます。データが入力されます。ただし、括弧の外側には、data
は完全に空です。なぜこれがうまくいかないのでしょうか?前もって感謝します。親切にコメントで述べたようmatiboo
EDIT 、私はAFNetworkingは、他のすべての前に実行するために起こっメインとは別のスレッド上で実行されたことに気づきました。
しかし、これを修正する方法はまだわかりません。これを処理する関数を作るべきですか?
IOでキューについて読む必要があります。ブロック「成功」および「失敗」は、サーバ応答データの後にバックグラウンドキューで実行される。 すぐに[manager ....]コマンドを実行した後に、メインスレッドで外部NSLogが実行されます。 IOのスレッドとキューに関する関連リンクです。私はあなたがAFNetworkingを使用する前にまずそれを読むべきだと思います。 [link](https://www.raywenderlich.com/4295/multithreading-and-grandcentral-dispatch-on-ios-for-beginners-tutorial) –
ああ。 。 そうですか。私はこれを解決できる方法はありますか? –
私はあなたがJsonがサーバーから戻ったときに何をしたいのか分かりません。 Jsonが処理する必要がある場合は、globar変数(myはあなたの_オブジェクトです)で保存し、それを処理する関数を記述します。 –