0

我不知道如何更改results成功块内部的值。我__block像一些帖子建议的那样使用,但results永远为零。我在块内设置断点并确保它JSON不是零,它按我的预期下载数据。

如果相关,我正在使用 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;
}
4

1 回答 1

3

更有可能的是,[名称非常糟糕的]方法getPath:parameters:success:failure:是异步的。

因此,您需要告诉成功块中的某些内容该值已更改。IE

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

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

于 2012-12-07T23:55:34.307 回答