Objective-C:__block无效

时间:2012-12-07 23:51:46

标签: objective-c afnetworking

我无法弄清楚如何在成功块中更改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;
}

1 个答案:

答案 0 :(得分:3)

更有可能的是,[名字很差的]方法getPath:parameters:success:failure:是异步的。

因此,您需要在成功块中告诉某些值已更改。即

^{
     [something yoManGotEvents:[JSON valueForKey:@"events"]];
 }

(在非常特殊的情况下,方法不应以get为前缀。在上述情况之外使用该前缀的大量API的第三方库会对他们可能不遵循的其他系统特定模式提出疑问。)