[英]Accessing NSMutableArray from inside for loop
我在iOS和Objective-c开发方面是个新手,所以我对如何做到这一点感到很挣扎。
首先我的代码:
-(NSMutableArray *)messagesGetList
{
NSMutableArray *messageList = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:@"http://xxxx/"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
{
for (NSDictionary * dataDict in JSON) {
[messageList addObject: dataDict];
}
}
failure:^(NSURLRequest *request , NSURLResponse *response , NSError *error , id JSON)
{
NSLog(@"Failed: %@", error);
}];
[operation start];
return messageList;
}
我遇到的问题是,我无法访问for(JSON中的NSDictionary * dataDict)循环中的NSMutableArray * messageList。 即在执行我的循环时,什么都没有添加到数组中。
如何从循环中访问数组?
预先感谢您的帮助,菲舍尔
我认为您需要将__block
storage修饰符添加到NSMutableArray
变量中,以使其在块响应中可变。
__block NSMutableArray *messageList = [[NSMutableArray alloc] init];
由于+JSONRequestOperationWithRequest:
在成功和失败时都需要调用块,因此可以很好地猜测此方法是异步运行的。 因此,如果您要立即检查从-messagesGetList
返回的数组,则该数组很可能为空。 如果在检查之前稍等片刻,可能会发现它已满。
您应该将委托对象传递给此方法,并在网络请求完成后将消息发送给委托。 这是iOS平台上的最佳做法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.