Ich versuche, einige Daten aus CloudKit zu laden, um eine Tabellenansicht mit benutzerdefinierten Zellen zu füllen, und ich habe Schwierigkeiten, die Daten angezeigt zu bekommen.UITableViewCells wird nicht laden Index liegt außerhalb des Bereichs
Wenn ich die Anzahl der Zeilen als die Anzahl der CKRecord-Array definieren, wird die Tabellenansicht angezeigt, aber nichts in sie geladen. Sie sind nur richtig verteilt, damit die Bilder dort sind. Wenn ich Haltepunkte bei let record = matches[indexPath.row]
einstelle, wird es auch nicht ausgelöst.
Wenn ich jedoch die return matches.count
in eine tatsächliche Zahl ändern, stürzt das Projekt bei let record = matches[indexPath.row]
mit dem Fehler ab, dass der Index außerhalb des Bereichs liegt. Ich möchte die Anzahl der Zeilen als die Anzahl für das Datensatzarray beibehalten, aber das ist die einzige Änderung, die tatsächlich die Überschreibungsfunktion ausführt, die die Tableview-Zelle aufruft.
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return matches.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Card", for: indexPath) as! MatchTableViewCell
let record = matches[indexPath.row]
if let img = record.value(forKey: "Picture") as? CKAsset {
cell.profileimg.image = UIImage(contentsOfFile: img.fileURL.path)
}
return cell
}
Jede Beratung
Update- hier geschätzt ist, wo ich das Modell laden
func loadModel() {
let totalMatch = (defaults.object(forKey: "passedmatch") as! [String])
let predicateMatch = NSPredicate(format: "not (UserID IN %@)", totalMatch)
ProfilesbyLocation = defaults.object(forKey: "Location") as! String
let query = CKQuery(recordType: ProfilesbyLocation , predicate: predicateMatch)
publicData.perform(query, inZoneWith: nil,completionHandler: ({results, error in
print("loading")
if (error != nil) {
let nsError = error! as NSError
print(nsError.localizedDescription)
print ("error")
} else {
if results!.count > 0 {
DispatchQueue.main.async() {
self.tableView.reloadData()
self.refresh.endRefreshing()
print("refreshed")
}
}
}
}
)
)}
Und es gibt keine Möglichkeit, dass "Übereinstimmungen" irgendwie zwischen den Aufrufen von "numberOfRowsInSection" und "cellForRowAt" geändert wird? – NRitH
Das Array lädt asviewdload asynchron, so dass ich nicht sicher bin, wie es danach –
* A * synchron ändern könnte? Also * könnte * durch einen anderen Thread geändert werden, während der Haupt-Thread versucht, von ihm zu lesen? – NRitH