gpt4 book ai didi

ios - 将自定义对象添加到 block 内的 NSMutableArray 时遇到问题

转载 作者:行者123 更新时间:2023-11-29 04:42:46 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

关于ios - 将自定义对象添加到 block 内的 NSMutableArray 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com