我是目标-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??**
}
所以我的问题是:
[[CustomAPIClient...
阻止的情况下保持身份验证?先谢谢你们。
更好地解释我在做什么。我有表视图单元格:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.meResponseObjectFromAboveCode count];
}
所以我希望在我的响应对象中有什么,显示在我的表视图中
答案 0 :(得分:0)
块是执行单元。在这种情况下,您将为此方法提供一个块,它可以在请求成功返回后执行。所以,首先,你给网络客户端一些代码并说“我希望它在你完成的时候执行,现在也是。”理论上,如果可以将responseObject
“放在这里”,那么它将是零(或者至少不是你想要的),因为在执行getPath
方法之后,它会存储块稍后执行(稍后),然后继续执行该方法之后的代码,基本上是在您发出网络请求之后,让它没有时间实际发出请求,返回并使responseObject
可用。
其次,块是封闭的。意思是,它捕获了它自己范围之外的变量,但是传递给它或在其中初始化的任何东西都被“封闭”在其中并且在它之外是不可见的。
现在,为了明确这一点,可以通过在调用getPath
__block id veryBadIdea;
之前声明变量然后(因为{{1你可以在块里面改变它。所以,在这个糟糕的想法示例中,您可以__block
,然后veryBadIdea = responseObject
后getPath
可以NSLog(@"%@", veryBadIdea);
看到它是零。为什么?因为在调用NSLog时,网络请求可能甚至没有发送。当veryBadIdea被赋值为responseObject
时,viewDidLoad
已经很久没有完成并返回。
因此,在块中使用responseObject
,导致它在可用的位置,并且在哪里(以及何时)您希望使用它运行任何代码。