在Objective-C中扫描X行后停止获取JSON

时间:2016-05-30 18:24:19

标签: objective-c json nsdictionary nsurl

我正在使用Objective-C创建一个新的iOS应用程序。我的应用程序使用提供JSON数据的API。问题是列表中有数百个JSON对象,无法使用API​​缩小搜索范围。我只想要前十,但是当我扫描它们所有时,它需要永远。

有没有办法只扫描前10个(或任何数量)JSON对象并停止?

这是我当前获取所有数据的代码。

- (void)fetchCodeForces {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    NSString *requestString = @"https://codeforces.com/api/contest.list?gym=false";
    NSURL *url = [NSURL URLWithString:requestString];

    NSURLRequest *req = [NSURLRequest requestWithURL:url];

    NSURLSessionDataTask *datatask = [self.session dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

        _f1 = json[@"result"];

        for (NSDictionary *d in _f1) {
            if ([d[@"phase"] isEqualToString:@"BEFORE"])
            {
                [_fetched addObject:d];
            }else {
                break;
            }
        }

        dispatch_async(dispatch_get_main_queue(), ^ {

            [self.tableView reloadData];
        });



    }];
    [datatask resume];
});
}

1 个答案:

答案 0 :(得分:0)

NSInteger findedPhase = 0;
for (NSDictionary *d in _f1) {
            if ([d[@"phase"] isEqualToString:@"BEFORE"] && findedPhase < 10)
            {
                [_fetched addObject:d];
                 findedPhase += 1;
            }else {
                break;
            }
        }

这仅为10个“之前”阶段(或更少)添加到_fetched数组。这是你想要的吗?