【问题标题】:Stop fetching JSON after X lines scanned in, in Objective-C在Objective-C中扫描X行后停止获取JSON
【发布时间】:2016-09-28 15:22:14
【问题描述】:

我正在用 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];
});
}

【问题讨论】:

    标签: objective-c json nsdictionary nsurl


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

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

    【讨论】:

    • for 循环并不是它运行缓慢的原因。原因是获取所有数据,我正在寻找一种不获取所有数据的方法。
    猜你喜欢
    • 1970-01-01
    • 2012-01-04
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多