在使用该数组填充Swift中的UITableView中的单元格之前,如何将CKRecords添加到数组中?

时间:2015-05-23 14:40:08

标签: ios arrays uitableview swift

我一直在尝试使用fetchRecords函数来填充CKRecords数组来填充UITableView单元格。当我运行应用程序时,UITableView在fetchRecords函数之前调用numberOfRowsInSection函数。

func fetchRecords(){
    let predicate = NSPredicate(value: true)
    let query = CKQuery(recordType: "Counter", predicate: predicate)

    let queryOperation = CKQueryOperation(query: query)
    queryOperation.recordFetchedBlock = { (record : CKRecord!) in

        self.objects.append(record)
        println("recordFetchedBlock: \(record)")
    }

    cloudKitHelper.privateDB.addOperation(queryOperation)

    /*
    cloudKitHelper.privateDB.performQuery(query, inZoneWithID: nil, completionHandler: {(results, error) ->Void in
        if error != nil{
            println(error)
        }
        else {
            println(results)

            for result in results{
                self.objects.append(result as! CKRecord)
                println(self.objects[0].valueForKey("Title"))
                println(self.objects[0].valueForKey("Count"))
            }
        }
    })*/
}

我尝试过使用addOperation和performQuery来获取记录。两者似乎都正常工作,他们只是在UITableView已经运行numberOfRowsInSection方法后获取记录,该方法返回objects.count

override func viewDidLoad() {
    super.viewDidLoad()
    fetchRecords()

如您所见,fetchRecords()是超级调用后在viewDidLoad()中调用的第一个东西。

我试图找出如何在加载UITableView之前用CKRecords加载对象数组

1 个答案:

答案 0 :(得分:0)

您需要更新主调度线程上的UI元素。 recordFetchedBlock将被多次调用 - 大概每次,当记录变为可用时,您将需要更新表视图。试试这个:

queryOperation.recordFetchedBlock = { (record : CKRecord!) in
  println("recordFetchedBlock: \(record)")
  dispatch_async (dispatch_get_main_queue()) {
    self.objects.append(record)
    self.tableView.reloadData()
  }
}