Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS/Swift: tableView cellForRowAtIndexPath crash

I am experiencing a EXC_BREAKPOINT crash at line 389

386    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
387        let cell = tableView.dequeueReusableCellWithIdentifier("StationsCell", forIndexPath: indexPath)
388        cell.textLabel?.text = self.suggestionStations?[indexPath.row]
389        return cell
390    }

here is the crash report from Crashlytics, happening at 2% of users:

Thread : Crashed: com.apple.main-thread 0 Trenìt! 0x10004a2e4 specialized MasterViewController.tableView(UITableView, cellForRowAtIndexPath : NSIndexPath) -> UITableViewCell (MasterViewController.swift:389) 1 Trenìt! 0x100046488 @objc MasterViewController.tableView(UITableView, cellForRowAtIndexPath : NSIndexPath) -> UITableViewCell (MasterViewController.swift) 2 UIKit 0x18c6b239c -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 544 3 UIKit 0x18c6a6fc4 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2360 4 UIKit 0x18c49cc60 -[UITableView layoutSubviews] + 172 5 UIKit 0x18c3b9874 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 572 6 QuartzCore 0x18bd11d58 -[CALayer layoutSublayers] + 168 7 QuartzCore 0x18bd0c944 CA::Layer::layout_if_needed(CA::Transaction*) + 320

any idea why this happens?

like image 775
Daniele B Avatar asked Aug 31 '25 01:08

Daniele B


2 Answers

The crash was caused by the suggestionStations array not having a value at the index.

I was not calling ReloadData() on the table when the array was reset to 0. So the the table function was still called in a race condition when the value at the index didn't exist anymore.

The fix was to call ReloadData() also after resetting the array. Otherwise there could have been a check that the index was defined for the array, but this shouldn't be needed if reloadData is properly called each time.

like image 180
Daniele B Avatar answered Sep 02 '25 17:09

Daniele B


We have had the same issue. This issue is 100% percent reproducible on iOS 10 beta1.

Although hard to believe, we managed to fix the issue by giving a very short cell identifier on storyboard. Like "PhoneContactCell" rename to "PCell".

After some investigation, we kind of think it is a storyboard bug: if a cell prototype is copied and modified then it will probably have this issue.

like image 28
sbhhbs Avatar answered Sep 02 '25 16:09

sbhhbs