繁体   English   中英

从内部循环访问NSMutableArray

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM