У меня есть контроллер таблицы с двумя разделами. Первый загружается немедленно и всегда имеет только одну строку, а вторая содержит объекты, загруженные из Parse асинхронно. Независимо от того, что я пытаюсь, я всегда получаю неизвестную ошибку, которая приводит к сбою моего приложения при попытке перезагрузить tableview. Я установил контрольную точку исключения, и она запускается в reloadData call/reloadSections. Если я прокомментирую эту строку, она отлично работает, но, очевидно, не обновляется. Я пробовал:Swift UITableView Неизвестный сбой при перезагрузке
- reloadData и reloadSections
- Загрузка объектов в viewDidLoad.
- Загрузка объектов в viewDidAppear.
- Загрузка объектов с помощью dispatch_async в основной поток.
- Загрузка объектов с помощью dispatch_after на основной поток после двух секунд.
- reloadData и reloadSections в основной теме.
- Я также проверил, что запрос выполняется успешно.
Я использую Swift 1.2 и Xcode 6.3
Вот код, где я извлечения объектов:
var classes = [PFObject]()
override func viewDidLoad() {
super.viewDidLoad()
let relation = user.relationForKey(classesKey)
let query = relation.query()
query!.findObjectsInBackgroundWithBlock { (results: [AnyObject]?, error: NSError?) -> Void in
if let error = error {
println(error.localizedDescription)
} else {
self.classes = results as! [PFObject]
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadSections(NSIndexSet(index: 1), withRowAnimation: UITableViewRowAnimation.Automatic)
}
}
}
}
А вот мои реализации tableViewDataSource:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 2
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return 1
case 1:
return self.classes.count
default:
assert(false, "ERROR: Bad Section")
return 0
}
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier(self.reuseIdentifier) as? UITableViewCell
if (cell == nil) {
cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: reuseIdentifier)
}
switch section {
case 0:
cell?.textLabel?.text = (self.mode == LXMode.Learn) ? "Add Classes You Need Help With" : "Add Classes You Want to Tutor"
case 1:
let classObject = self.classes[indexPath.row]
cell?.textLabel?.text = classObject.objectForKey("name") as? String
cell?.detailTextLabel?.text = classObject.objectForKey("departmentPrefix") as! String + "-" + String(classObject.objectForKey("number") as! Int)
default:
assert(false, "ERROR: Bad Section")
break
}
return cell!
}
Любой идея, что может быть причиной этого?
Вместо того, чтобы перезагружать только раздел, попробуйте перезагрузить весь вид таблицы и поместите точку останова в cellForRowAtIndexPath & numberOfRowsInSection. И попытайтесь выяснить причину аварии. Пока вы это делаете, проверьте, находитесь ли вы в основном потоке или нет. –
Привет @KumarNitin, я попробовал это. После вызова всех соответствующих методов делегирования происходит сбой. – AttilaTheFun
Что означает «некоторая неизвестная ошибка»? – nhgrif