我是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;
}
我遇到的问题是,我无法访问my for(NSDictionary * dataDict in JSON)循环中的NSMutableArray * messageList。 即执行循环时,没有任何内容添加到数组中。
如何从循环中访问数组?
先谢谢你的帮助, 费
答案 0 :(得分:3)
我认为您需要将__block
存储修饰符添加到NSMutableArray
变量中,以使其在块响应中可变。
__block NSMutableArray *messageList = [[NSMutableArray alloc] init];
答案 1 :(得分:3)
由于+JSONRequestOperationWithRequest:
在成功和失败时调用块,因此可以猜测此方法是异步运行的。因此,如果您正在检查从-messagesGetList
返回的数组,那么它可能是空的。如果您在检查前等待一段时间,您可能会看到它已填满。
答案 2 :(得分:0)
您应该将委托对象传递给此方法,并在网络请求完成时向委托发送消息。这是iOS平台上的最佳实践。