无法在块内向NSMutableArray添加自定义对象

时间:2012-04-12 11:35:20

标签: ios nsmutablearray objective-c-blocks nsobject

我在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,所以无法保留。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

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

  1. 不要使用dispatch_async和阻止,只需简单地发送内联请求即可。如果你展示的代码在主线程上运行,我不推荐这个。
  2. 注册完成回调并检查您的对象数组。您可以在完成回调部分
  3. 中查看如何执行此操作here

    顺便说一下,发送的过去形式是发送