Я только что начал тестировать CloudKit, и у меня довольно медленные запросы. Вот пример кода, который я использую:CloudKit Query Time
//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 секунды.
Что происходит ?!
Спасибо.
вы регистрируете извлеченные записи перед назначением им результатов. Этот обратный вызов также вызывается в фоновом потоке. Вы должны вызвать allertview из основного потока. –
Упс! Но если я не могу называть мой код «done» в блоке завершения, в чем смысл блока соревнований? Я решил это, поставив 'reloadData' моего tableview, обратно в основной поток. См. Мой ответ. –