0

アプリ コードを MVC モデルに移行するため、API からデータを取得するメソッドを作成しました。

+ (NSMutableArray *)loadFromFeed {
    NSString *feed = @"https://api.test.com";

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:feedUrl]];

    request = [mutableRequest copy];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    operation.responseSerializer = [JSONResponseSerializerWithData serializer];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSArray *jsonArray = (NSArray *)[responseObject objectForKey:@"items"];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        CLS_LOG(@"Error");
    }];
}

jsonArrayさて、理想的には、この方法の一部として戻りたいと思います。ただし、AFHTTPRequestOperation非同期であるため、これを解決する方法がわかりませんが[Data loadFromFeed];、アプリ内のどこでも呼び出すことができます。これどうやってするの?

4

1 に答える 1

2

success と failure という名前の 2 つのブロックを に渡しloadFromFeed、成功と失敗のブロックから 2 つのブロックを呼び出して、setCompletionBlockWithSuccessjsonArray を success ブロックに渡すことができます。

typedef void (^Success)(id data);
typedef void (^Failure)(NSError *error);

- (void)loadFromFeed:(Success)success failure:(Failure)failure;


[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSArray *jsonArray = (NSArray *)[responseObject objectForKey:@"items"];
    success?success(jsonArray):nil;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    failure?failure(error):nil;
}];

次に、次のように使用します。

[Data loadFromFeed:^(id data) {
    NSLog(@"%@",data)
} failure:^(NSError *error) {
    NSLog(@"%@",error)
}];];
于 2015-05-27T18:08:07.063 に答える