2017-02-22 58 views
0

У меня здесь небольшой ментальный блок, я довольно комфортно отношусь к Core Data и решил пообщаться с CloudKit для некоторых из моих приложений, однако, в то время как сторона загрузки была довольно простой, У меня возникла проблема с заполнением простого вида таблицы.Swift3, CloudKit и UITableView возвращают пустой стол

CKRecord - это активность и поле, которое я хотел бы отобразить, - это имя. Функция print print (actName) возвращает 7 раз, показывая, что все записи были подсчитаны, но таблица пуста и ошибок нет.

Я уверен, что это что-то простое, и я не вижу дерева для деревьев, так что я счастлив за правильное направление.

Приветствия

import UIKit 
import CloudKit 

class TableViewController: UITableViewController { 

    var activities = [Activity]() 


    override func viewDidLoad() { 
     super.viewDidLoad() 



     tableView.delegate = self 
     tableView.dataSource = self 
    } 


    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     print("counted records") 
     return activities.count 

    } 


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
     let active = activities[indexPath.row] 
     if let actName = active.name { 

     cell.textLabel?.text = actName 

      print(actName) 

     } 
     return cell 
    } 
+0

Где вы храните объекты в массиве 'деятельности'. –

+0

Нирав, это было мое намерение. My CK Record Type - это активность в открытой базе данных. Я не понимаю, почему я возвращаю «засчитанные записи», но не «actName». – Bowcaps

+0

Как я уже сказал, это мое первое погружение в CloudKit, и я использовал некоторый синтаксис, который я использовал для своих приложений CoreData, которые работают безупречно. – Bowcaps

ответ

0

Я, кажется, разобрались, user3069232, я не думаю, что было/есть большая проблема латентности как код обновления был мгновенным с CloudKit Desktop. Нирав, я думаю, ты был прав, он сводился к тому, чтобы не хранить, а затем перезагружать. Я изменил свой исходный код, так как я думаю, что «Активность» также вызывает проблемы, сценарий ниже работает хорошо, спасибо за то, что в правильном направлении ребята.

import UIKit 
import CloudKit 

class CoursesVC: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var coursesTable: UITableView! 


    var coursesArray: Array<CKRecord> = [] 

    var selectedCourseIndex: Int! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     coursesTable.delegate = self 
     coursesTable.dataSource = self 
     fetchCourses() 

    } 

    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return coursesArray.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "courseCell", for: indexPath) 
     let courseRecord: CKRecord = coursesArray[indexPath.row] 

     cell.textLabel?.text = courseRecord.value(forKey: "courseVenue") as? String 

     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "dd MMMM yyyy" 

     let CSDate = dateFormatter.string(from: courseRecord.value(forKey: "courseDate") as! Date) 
//  let CSDetail = courseRecord.value(forKey: "courseDetail") as? String 
     cell.detailTextLabel?.text = CSDate 

     return cell 
    } 

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return 40.0 
    } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     selectedCourseIndex = indexPath.row 
     performSegue(withIdentifier: "showMapDetail", sender: self) 
    } 

    func fetchCourses() { 
     let container = CKContainer.default() 
     let publicDatabase = container.publicCloudDatabase 
     let predicate = NSPredicate(format: "TRUEPREDICATE") 

     let query = CKQuery(recordType: "Courses", predicate: predicate) 
     query.sortDescriptors = [NSSortDescriptor(key: "courseDate", ascending: true)] 

     publicDatabase.perform(query, inZoneWith: nil) { (results, error) -> Void in 

      if error != nil { 

       print("error fetch notes \(error)") 

      } else { 

       print("Success") 

       for result in results! { 
        self.coursesArray.append(result) 
       } 

       OperationQueue.main.addOperation({() -> Void in 
        self.coursesTable.reloadData() 
        self.coursesTable.isHidden = false 
       }) 
      } 
     } 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

}