0

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;
}
4

1 に答える 1

3

おそらく、その[非常に不適切な名前の]メソッドgetPath:parameters:success:failure:は非同期です。

したがって、値が変更されたことを成功ブロックで伝える必要があります。いえ

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

(非常に特殊な状況以外では、メソッドに接頭辞を付けるべきではありませんget。多くの API を持つサード パーティのライブラリでは、前述の状況以外でその接頭辞を使用すると、他のシステム固有のパターンに従っていない可能性があるという疑問が生じます。)

于 2012-12-07T23:55:34.307 に答える