Как заставить приложение 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) } 
  • Стремительное объявление статической переменной
  • IBAction func правильно подключен, но не выполняет
  • Как вертикально центрировать содержимое UICollectionView
  • Как зарегистрировать NSUndoManager в Swift?
  • Увеличьте высоту прыжка при более длительном касании до максимальной высоты
  • Как обратиться к контроллеру с класса uitableviewcell в Swift
  • Анимируйте `backgroundColor`` UIView`, который реализует `drawRect`
  • В Swift я могу определить, действительно ли CLLocation действителен или нет?
  • Статический плеер AVPlayer
  • Понимание быстрого завершенности AlamofireHandler
  • Отображение панели вкладок становится пустым при переключении обратно с активной панелью поиска.
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.