2015-04-30 2 views
1

Итак, я создаю это приложение, которое использует CloudKit для сохранения и получения изображений и текста из Облака. Проблема в том, что я могу получить доступ только к результатам после завершения всей выборки. Я хотел бы иметь возможность извлекать каждую запись по отдельности, поскольку она извлекается. Вот код.Как я могу ускорить выполнениеQuery в Swift?

func fetchPost() { 
    spinner.startAnimating() 
    if imageView.image != nil { 
     spinner.alpha = 0 
    } 
    var imageData = [UIImage]() 
    var text = [String]() 
    let predicate = NSPredicate(value: true) 
    let sort = NSSortDescriptor(key: "creationDate", ascending: false) 

    let query = CKQuery(recordType: "Post", 
     predicate: predicate) 
    query.sortDescriptors = [sort] 
    publicDB.performQuery(query, inZoneWithID: nil) { 
     results, error in 
     if error != nil { 
      dispatch_async(dispatch_get_main_queue()) { 
       println("Query failed") 
       return 
      } 
     } else { 
      println("test") 
      var number = 0 
      for record in results { 
       if let pictureRecord = record as? CKRecord { 
        let post = Post(record: pictureRecord, database: self.publicDB) 
        let postImageData = post.imageData 
        let postText = post.text 
        self.images.append(UIImage(data: postImageData)!) 
        self.texts.append(postText) 
        println("\"\(postText)\" is the text. Fetch successful.") 
        if number == 0 { 
         self.imageView.image = self.images[0] 
         self.nameLabel.text = self.texts[0] 
        } 
        ++number 
       } else { 
        println("Records failed") 
       } 
      } 
     } 

     self.spinner.stopAnimating() 
     self.spinner.alpha = 1 
    } 
} 

Спасибо!

ответ

2

Если вы используете CKQueryOperation, вы можете установить обратный вызов (recordFetchedBlock), который будет вызываться для каждой записи, поскольку он извлекается с сервера.

Смежные вопросы