使表视图单元格可以访问responseObject

时间:2013-09-05 17:31:49

标签: ios objective-c json

我是目标-c&的新手仍然试图绕过这个。说我有这样的事情:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[CustomAPIClient sharedClient] getPath:@"/api/feed" parameters:[NSDictionary dictionary] success:^(AFHTTPRequestOperation *operation, id responseObject) {

    }];

    **//Now, how do I get my responseObject out here??**
}

我可能会以错误的方式解决这个问题,但基本上,我有一个控制器会显示某个视图。我还会有另一个这样的控制器:

- (void)viewDidLoad
    {
        [super viewDidLoad];
        [[CustomAPIClient sharedClient] getPath:@"/api/profile" parameters:[NSDictionary dictionary] success:^(AFHTTPRequestOperation *operation, id responseObject) {

        }];

        **//Now, how do I get my responseObject out here??**
    }

所以我的问题是:

  1. 如何在该块之外获取responseObject?
  2. 有没有办法让我在不调用[[CustomAPIClient...阻止的情况下保持身份验证?
  3. 先谢谢你们。


    更好地解释我在做什么。我有表视图单元格:

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [self.meResponseObjectFromAboveCode count];
    }
    

    所以我希望在我的响应对象中有什么,显示在我的表视图中

1 个答案:

答案 0 :(得分:0)

块是执行单元。在这种情况下,您将为此方法提供一个块,它可以在请求成功返回后执行。所以,首先,你给网络客户端一些代码并说“我希望它在你完成的时候执行,现在也是。”理论上,如果可以将responseObject“放在这里”,那么它将是零(或者至少不是你想要的),因为在执行getPath方法之后,它会存储块稍后执行(稍后),然后继续执行该方法之后的代码,基本上是在您发出网络请求之后,让它没有时间实际发出请求,返回并使responseObject可用。

其次,块是封闭的。意思是,它捕获了它自己范围之外的变量,但是传递给它或在其中初始化的任何东西都被“封闭”在其中并且在它之外是不可见的。

现在,为了明确这一点,可以通过在调用getPath __block id veryBadIdea;之前声明变量然后(因为{{1你可以在块里面改变它。所以,在这个糟糕的想法示例中,您可以__block,然后veryBadIdea = responseObjectgetPath可以NSLog(@"%@", veryBadIdea);看到它是零。为什么?因为在调用NSLog时,网络请求可能甚至没有发送。当veryBadIdea被赋值为responseObject时,viewDidLoad已经很久没有完成并返回。

因此,在块中使用responseObject,导致它在可用的位置,并且在哪里(以及何时)您希望使用它运行任何代码。