2012-04-12 49 views
0

我正在使用dispatch_async块内的ASIFormDataRequest从应用程序发送一些自定义对象到服务器。当我从服务器收到OK时,我需要把对象放在一个NSMutableArray中。但是当我尝试从块外部访问数组时是空的。添加自定义对象到块内的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

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

  1. 不要使用dispatch_async和块,只需简单地发送请求内联。如果您显示的代码在主线程上运行,我不会推荐此选项。
  2. 注册完成回调,然后检查您的对象数组。你可以看到这是如何做到在完成回调部分here

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

+0

我做到了同步,它的工作发现。然后我看到调度队列只有一个默认的优先级,它发生了你所说的,NSLog在块之前到达。 Thanx for grammatically lesson,difficult when I am working in 3 different language。 – lagos 2012-04-12 12:35:09

相关问题