CloudKit查询时间

乔什·卡汉(Josh Kahane)

我刚刚开始试用CloudKit,查询时间却很慢。这是我正在使用的一些示例代码:

//CLOUDKIT
    CKContainer *container = [CKContainer defaultContainer];
    CKDatabase *privateDatabase = [container privateCloudDatabase];
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
    CKQuery *query = [[CKQuery alloc] initWithRecordType:@"FlightLog" predicate:predicate];
    
    [privateDatabase performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
        //SUCCESS
        if (!error)
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"SUCCESS" message:@"IT WORKED" delegate:self cancelButtonTitle:@"dismiss" otherButtonTitles:nil];
            [alert show];

            NSLog(@"%@", @"fetchFlights success!");
            NSLog(@"%@", self.fetchedRecords);

            self.fetchedRecords = results;
            [self.tableView reloadData];
        }
        //ERROR
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"error" message:error.localizedDescription delegate:self cancelButtonTitle:@"dismiss" otherButtonTitles:nil];
            [alert show];

            NSLog(@"%@", error);
        }
        
    }];

我得到了专用数据库,并查询了所有记录。我在仪表板中仅添加了四个简单的代码。

调用此代码后,我可以从控制台日志中看到成功消息几乎立即被调用,结果数组为空。然后,稍后返回结果,如日志中所示。但是,没有显示警报视图,并且结果在我的表格中显示了大约3-4秒。

这是怎么回事?

乔什·卡汉(Josh Kahane)

解决了。正如Edwin所提到的,我不知道回调是在后台线程上进行的。因此,当我[self.tableView reloadData]在完成块中调用时,它也在后台线程上运行。

通过将其放回主线程,表视图将在大约一秒钟内重新加载。如果在与回调相同的线程上运行,则耗时约4-5秒。

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
        dispatch_async(dispatch_get_main_queue(), ^{
                           [self.tableView reloadData];
                       });
    });

让我知道我是否被误解了,但是我认为那是发生了的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章