私は自分のサーバーとのすべての通信にAFNetworkingを使用しています。すべてが「APIConnector」という別のクラスに入れられています。AFNetworking 3非同期イメージダウンロードキュー
私はユーザーをダウンロードしようとしています。私はユーザーIDを持っているときに私はURLを生成することができますが、私はそれらを受け取る前にどのユーザーが私はサーバーから得るか分からない。私が今持っているコードは次のようになります。
AFHTTPSessionManager *httpManager = [AFHTTPSessionManager manager];
AFHTTPSessionManager *imageManager = [AFHTTPSessionManager manager]; //Used for posting to the server
[httpManager POST:url parameters:dict progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
UIImageView *imageHolder = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"placeholder"]];
if (isUser) {
NSMutableArray *users = [NSMutableArray new];
int i = 1;
for (id userResult in responseObject) {
User *user = [[User alloc] initWithId:[userResult valueForKey:@"index"] name:[userResult valueForKey:@"name"]];
user.imageURL = [NSString stringWithFormat:@"%@/image/?index=%@&imgIndex=0",backendURL,user.userID];
[users addObject:user];
if (i == [responseObject count]) {
success(users);
}
i++;
}
が、私はこのようにそれを試してみましたが、またこのようですが、操作とした、いくつかのことを変更し、いくつかの反復を行ってきた:
AFHTTPSessionManager *imageManager = [AFHTTPSessionManager manager]; //Used for posting to the server
[httpManager POST:url parameters:dict progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
UIImageView *imageHolder = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"placeholder"]];
if (isUser) {
NSMutableArray *users = [NSMutableArray new];
int i = 1;
for (id userResult in responseObject) {
User *user = [[User alloc] initWithId:[userResult valueForKey:@"index"] name:[userResult valueForKey:@"name"]];
user.imageURL = [NSString stringWithFormat:@"url to image"];
[users addObject:user];
if (i == [responseObject count]) {
success(users);
}
i++;
}
NSMutableArray *usersWithImage = [NSMutableArray new];
for (int i = 0; i < users.count;i++) {
User *userImg = [users objectAtIndex:i];
NSString *imageURL = [NSString stringWithFormat:@"%@/image/?index=%@&imgIndex=0",backendURL,userImg.userID];
imageManager.responseSerializer = [AFImageResponseSerializer serializer];
[imageManager GET:imageURL parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable imgResponse) {
User *user = userImg;[users objectAtIndex:i];
user.profilePic.image = imgResponse;
[usersWithImage addObject:user];
if (i == users.count-1) {
success(usersWithImage);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@",error);
}];
それを " 「作品」」それだけですべての画像のように、私も試した中で最後の画像ロード:https://github.com/robertmryan/AFHTTPSessionOperation/同じ結果を
EDIT/ADD:
NSMutableArray *users = [NSMutableArray new];
dispatch_group_t group = dispatch_group_create();
for (id acResult in responseObject) {
User *user = [[User alloc]initWithId:[acResult valueForKey:@"index"] name:[acResult valueForKey:@"name"]];
NSString *imageURL = [NSString stringWithFormat:@"%@/image/?index=%@&imgIndex=0",backendURL,user.userID];
dispatch_group_enter(group);
[imageManager GET:imageURL parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
user.imageData = UIImageJPEGRepresentation(responseObject, 1);
[users addObject:user];
dispatch_group_leave(group); // leave if successful
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@",error);
dispatch_group_leave(group); // leave if not
}];
}
dispatch_group_notify(グループ、ディスパッチ_get_main_queue()、^ { 成功(アクティビティ); //これは決して と呼ばれます}); また、私は何人のユーザが到着するか(1コールにつき10だけ)を制御するが、どのIDを持っているのか分からない。 2番目の例では
"最後のイメージをロードする"と言うとき、 'for'ループの中で' GET'が何回呼び出されているかを確認しましたか?また、 'User'オブジェクトの' profilePic'とは何ですか?画像ビューである可能性がありますが、実際にはモデル内にUIオブジェクトを配置すべきではありません。 – Rob
ところで、どこに 'userID'が設定されていますか?私はあなたがユーザーのリストをダウンロードするときにそれを設定して表示されません。では、どのような 'userID'値を使うのか、これはどうやって分かりますか? – Rob
最終的な観察:[Charles](http://charlesproxy.com)のようなツールをチェックすることをお勧めします。このツールは、この種の問題の診断に役立ちます。独立したツールでリクエストとレスポンスを見ることができ、問題の原因を簡単に特定できます。 – Rob