Как заставить приложение cloudkit загружать данные в качестве загрузки?

В приложении, которое я создаю, для приложения будет загружено множество данных для загрузки из iCloud. Моя проблема заключается в том, что он не загружает данные в представление коллекции до тех пор, пока не закончит получение всех данных (что занимает некоторое время). Я хочу, чтобы приложение загружало данные в представление коллекции, получая данные, поэтому пользователю не нужно ждать. Или лучше, если приложение загружает только некоторые данные за раз? Как мне это сделать? Вот мой код, который я использую для загрузки данных.

Примечание. Я использую быстрый для этого проекта.

func loadInfo() { let predicate:NSPredicate = NSPredicate(value: true) let query:CKQuery = CKQuery(recordType: "Data", predicate: predicate) query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] if let database = self.publicDatabase { database.performQuery(query, inZoneWithID: nil, completionHandler: { (records:[AnyObject]!, error:NSError!) in if error != nil { self.alert("Error: \(error.localizedDescription)", Message: "Make sure iCloud is turned on and you are connected to the internet") } else { dispatch_async(dispatch_get_main_queue()) { self.array.removeAll(keepCapacity: false) for record in records { let usernameRecord:CKRecord = record as CKRecord self.array.append(usernameRecord.objectForKey("Info") as String) } //update data self.collectionView.reloadData() } } }) }} 

One Solution collect form web for “Как заставить приложение cloudkit загружать данные в качестве загрузки?”

если вы выполните executeQuery, записи будут возвращены сразу. Если вам нужен прогресс, вы можете использовать CKQueryOperation . Затем вы получите вызов для каждой записи для блока:

  operation.recordFetchedBlock = { record in 

Когда запрос будет готов, тогда будет вызов.

 operation.queryCompletionBlock = { cursor, error in 

Количество возвращенных записей будет ограничено максимумом (обычно 100). Это значение может быть установлено с помощью:

 operation.resultsLimit = CKQueryOperationMaximumResults; 

Просто установите его на нужное значение.

Вот пример, основанный на ссылке из комментария ниже:

 func loadInfo() { let p = NSPredicate(value: true) let q = CKQuery(recordType: "Data", predicate: p) q.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] let queryOperation = CKQueryOperation(query: q) let database = self.publicDatabase self.array.removeAll(keepCapacity: false) queryOperation.recordFetchedBlock = fetchedARecord queryOperation.queryCompletionBlock = { [weak self] (cursor : CKQueryCursor!, error : NSError!) in if error != nil { self.alert("Error: \(error.localizedDescription)", Message: "Make sure iCloud is turned on and you are connected to the internet") } else { if cursor != nil { println("there is more data to fetch") let newOperation = CKQueryOperation(cursor: cursor) newOperation.recordFetchedBlock = self!.fetchedARecord newOperation.queryCompletionBlock = queryOperation.queryCompletionBlock database.addOperation(newOperation) } } else { dispatch_async(dispatch_get_main_queue()) { self.collectionView.reloadData() } } } database.addOperation(queryOperation) } var i = 0 func fetchedARecord (record: CKRecord!) { println("\(NSDate().timeIntervalSinceReferenceDate*1000) \(++i)") self.array.append(record.objectForKey("Info") as String) } 
  • Печать объекта NSManagedObject подкласса Core Data для консоли возвращает пустую строку в Swift
  • Полученная ошибка: Error Domain = com.facebook.sdk.core Код = 8 "(null)"
  • nil для пользовательского UICollectionCell
  • Обновление каждого дня в быстром синтаксисе
  • Сбой при нажатии на другой контроллер после `didFinishPickingMediaWithInfo`
  • Разрывы строк и количество строк в Swift Label (программно)
  • Сортировать по нескольким свойствам с помощью Realm
  • Тип «Any» не имеет элементов подписи после обновления до Swift 3
  • EXC_BAD_ACCESS при доступе к вычисленному свойству NSManagedObject
  • неожиданно нашел нуль при развертывании необязательного значения - с помощью ALAMOFIRE
  • Как вставить элементы в индекс 0 в контейнер Realm
  • Interesting Posts

    Ionic 2 преобразуется в Ionic 3: «Ошибка: не удалось перекрыть программу» на «ionic build iOS»

    Swift – Заголовок не отображается для контроллера просмотра навигации

    Ограничение анимации Autolayout не поддерживает анимацию

    как добавить анимацию в экран запуска в iOS 9.3 с помощью Objective c

    Действительно ли Keychain в iOS работает?

    Как отсортировать результаты NSFetchedResultsController, используя порядок NSOrderedSet

    фоновое изображение iOS для нескольких устройств

    Как можно изменить размытость UIVisualEffectView при перетаскивании в iOS?

    Представление и отклонение модального представления в ios 7

    ионная / firebase ipv6 Отказ приложения Auth ios

    App Store: запуск только для iPhone / iPod, а не для iPad

    Остановить повторное использование пользовательских ячеек Swift

    iOS 7 UINavigationBar не скрыт при просмотре перехода

    Интерфейс на основе страниц использует несколько одинаковых диспетчеров

    Расширяемая iOS ячеек таблицы

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.