0

我正在使用 dispatch_async 块内的 ASIFormDataRequest 将一些自定义对象从应用程序发送到服务器。当我从服务器收到 OK 时,我需要将对象放入 NSMutableArray 中。但是当我尝试从块外部访问数组时,它是空的。

我的代码伪代码是这样的:

  -(void)sendObjects{
      NSMutableArray *sendedObjects = [NSMutableArray alloc]init];
      NSMutableArray *objectsToSend = [NSMutableArray alloc]init];

     for(ObjectSend *obj in objectsToSend){
           dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{

           ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
           [request addRequestHeader:@"Content-Type" value:@"application/json"];
           [request appendPostData:[NSJSONSerialization dataWithJSONObject:sendDictWithObjects options:NSJSONWritingPrettyPrinted error:&error]];
           [request startSynchronous];
           NSError *requestError = [request error];
           if(!requestError){
                NSString *response = [request responseString];

                obj.sended = YES;
                [sendedObjects addObject:s];

            }

          });
      }
      NSLog(@"%i",sendedObjects.count);

  }

最后 sendedObjects 数组为空。我正在使用 ARC,所以无法保留。有人可以帮助我吗?

4

1 回答 1

1

您的请求可能是同步的,但您从计划并发执行的块中分派它们。这意味着 NSLog 语句可以在您的任何请求被分派之前到达。您有两种选择来解决您的问题:

  1. 不要使用 dispatch_async 和块,只是简单地发送请求内联。如果您显示的代码在主线程上运行,我不建议这样做。
  2. 注册完成回调并检查您的对象数组。您可以在完成回调部分中查看如何在此处完成此操作

顺便说一句,过去的send形式是sent

于 2012-04-12T12:15:18.653 回答