2017-02-22 2 views
0

Ich habe hier eine kleine mentale Blockade, ich bin ziemlich zufrieden mit Core Data und entschied mich für einige meiner Apps in CloudKit zu vertiefen, während die Upload-Seite ziemlich einfach war, Ich habe Probleme, eine einfache Tabellenansicht zu füllen.Swift3, CloudKit und UITableView gibt leere Tabelle zurück

Der CKRecord ist Aktivität und das Feld, das ich anzeigen möchte, ist Name. Die Druckfunktion print (actName) gibt 7 Mal zurück und zeigt an, dass alle Datensätze gezählt wurden, aber die Tabelle leer und keine Fehler enthält.

Ich bin sicher, das ist etwas einfaches und ich kann das Holz für die Bäume nicht sehen, also bin ich glücklich für einen Punkt in die richtige Richtung bitte.

Prost

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

Wo Sie Objekte in 'activities' array speichern. –

+0

Nirav, das war meine Absicht. Mein CK-Eintragstyp ist Aktivität in einer öffentlichen Datenbank. Ich bin ratlos, warum ich "gezählte Datensätze" bekomme, aber nicht "actName". – Bowcaps

+0

Wie ich sage, ist dies mein erster Einstieg in CloudKit und ich habe einige der Syntax verwendet, die ich für meine CoreData Apps verwendet habe, die einwandfrei funktionieren. – Bowcaps

Antwort

0

Ich scheine es zu sortier hat aus, user3069232, ich glaube nicht, es war/ist ein großes Latenzproblem wie das Aktualisieren Code mit Desktop-Wolkenjungen momentanen war. Nirav Ich glaube, du hattest Recht, es wurde nicht gespeichert und dann neu geladen. Ich habe meinen ursprünglichen Code geändert, da ich denke, dass "Activity" auch Probleme verursacht hat, das folgende Skript funktioniert gut, danke für den richtigen Punkt Jungs.

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. 
    } 

} 
Verwandte Themen