从内部for循环访问NSMutableArray

时间:2012-03-29 17:39:59

标签: objective-c ios

我是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。 即执行循环时,没有任何内容添加到数组中。

如何从循环中访问数组?

先谢谢你的帮助, 费

3 个答案:

答案 0 :(得分:3)

我认为您需要将__block存储修饰符添加到NSMutableArray变量中,以使其在块响应中可变。

__block NSMutableArray *messageList = [[NSMutableArray alloc] init]; 

答案 1 :(得分:3)

由于+JSONRequestOperationWithRequest:在成功和失败时调用块,因此可以猜测此方法是异步运行的。因此,如果您正在检查从-messagesGetList返回的数组,那么它可能是空的。如果您在检查前等待一段时间,您可能会看到它已填满。

答案 2 :(得分:0)

您应该将委托对象传递给此方法,并在网络请求完成时向委托发送消息。这是iOS平台上的最佳实践。