我无法弄清楚如何在成功块中更改results
的值。我使用__block
像一些帖子建议,但results
永远是零。我在块内部设置了断点,并确保JSON
不是nil,它按照我的预期下载数据。
如果相关,我正在使用AFNetworking库。
+(NSArray *)eventsByCityID:(NSString *)cityID startIndex:(NSUInteger)start count:(NSUInteger)count
{
__block NSArray *results = nil;
[[DoubanHTTPClient sharedClient] getPath:@"event/list" parameters:@{@"loc":dataSingleton.cityID} success:^(AFHTTPRequestOperation *operation, id JSON) {
results = [JSON valueForKey:@"events"];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"download events error: %@ \n\n",error);
}];
return results;
}
答案 0 :(得分:3)
更有可能的是,[名字很差的]方法getPath:parameters:success:failure:
是异步的。
因此,您需要在成功块中告诉某些值已更改。即
^{
[something yoManGotEvents:[JSON valueForKey:@"events"]];
}
(在非常特殊的情况下,方法不应以get
为前缀。在上述情况之外使用该前缀的大量API的第三方库会对他们可能不遵循的其他系统特定模式提出疑问。)