Ich erhalte den Fehler "Index außerhalb des Bereichs", wenn ich meine Tabellenansicht neu lade. Wenn ich tableView.ReloadData auskommentiere und die Array-Anzahl ausdrücke, wird ein vollständiges Array angezeigt. Wenn ich es jedoch in der Haupt-Dispatch-Warteschlange habe, wird ein leeres Array gedruckt und ein Fehler verursacht. HiertableView.ReloadData löscht Array - Index außerhalb des Bereichs
func loadData() {
posts = [CKRecord]()
print("loading")
var predicate : NSPredicate!
predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
let publicData = CKContainer.default().publicCloudDatabase
let queryPic = CKQuery(recordType: "Main", predicate: predicate)
publicData.perform(queryPic, inZoneWith: nil) { (results:[CKRecord]?, error:Error?) -> Void in
print(results?.count as Any)
//prints full array here
if let Pics = results {
self.posts = Pics
DispatchQueue.main.sync{
//Commenting out below prints a full array
self.tableView.reloadData()
self.refresh.endRefreshing()
print(results?.count as Any)
// full array also prints here when reloadData is removed.
print("refreshed pics")
}
}
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let varCount = posts.count as Int
print(varCount)
let post = posts[indexPath.row]
let cellPic = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! StreamTableViewCell
if let postContent = post["content"] as? String {
let postImage = post["picture"] as? CKAsset
let data = try? Data(contentsOf: (postImage?.fileURL)!)
let name = post["UserID"] as? String
let vote = post["voteInteger"] as! Int
cellPic.layer.cornerRadius = 8.0
cellPic.layer.masksToBounds = true
cellPic.delegate = self
cellPic.streamImageView.image = UIImage(data: data!)
cellPic.nameLabel.text = name
cellPic.contentLabel.text = postContent
cellPic.voteInteger.text = String(describing: vote)
cellPic.voteOld = vote
cellPic.recordName = post.recordID.recordName
}
return cellPic
ist der Debugger readout-
loading
Optional(3)
Optional(3)
refreshed pics
3
3
loading
0
fatal error: Index out of range
2017-10-07 17:51:36.345951-0400 PondrMatchv.2[2910:357829] fatal error:
Index out of range
Wie Sie sehen können, lädt es in Ordnung, wenn die Anwendung gestartet wird, das Array enthält 3 Datensätze, und ändert sich nicht, wenn neu geladen.
Wenn ich nur einen Datensatz im Array habe, wird es völlig neu geladen. Ich habe vor kurzem Cloudkit-Containernamen geändert, aber selbst wenn ich zum alten Container zurückwechsle, stürzt es ab. Dies geschieht auch im Produktionscontainer.
Update: Hier ist die Anzahl der Zeilen in Abschnitt Funktion.
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
Auch nach Bruchstellen und erneuten Bestätigung mit der Debugger Anzeige hinzufügen, scheint es über die gesamte Vermittlungsrufprozessor Skipping wird beim Nachladen, und ging direkt auf die Tableview cellForRowAt Funktion, weshalb ich nicht zwei bekommen Sie Optional(3)
Drucke.
Verschieben Sie die Zeile 'self.posts = Pics' in den Aufruf von' DispatchQueue.main.sync'. Und ändern Sie "main.sync" in "main.async". – rmaddy
guten Haken auf dem Async, nie bemerkt, dass. Stürzt immer noch mit dem gleichen Fehler ab, obwohl @rmaddy –
Haben Sie die Zeile 'self.posts = Pics' verschoben? – rmaddy