Below is the stacktrace of a crash that keeps occurring in one of my apps. I have no clue how to fix it and it doesn't always happen? PLEASE HELP :)
Does it have something to do with Swift Generics?
Thread : Crashed: com.apple.main-thread
0 MyApp 0x1000f4f5c specialized FriendsTableViewController.tableView(UITableView, cellForRowAtIndexPath : NSIndexPath) -> UITableViewCell (FriendsTableViewController.swift)
1 MyApp 0x1000f1f60 @objc FriendsTableViewController.tableView(UITableView, cellForRowAtIndexPath : NSIndexPath) -> UITableViewCell (FriendsTableViewController.swift)
2 UIKit 0x1867ad31c -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 692
3 UIKit 0x1867ad484 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 80
4 UIKit 0x18679c9b8 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2824
5 UIKit 0x186539208 -[UITableView _setNeedsVisibleCellsUpdate:withFrames:] + 240
6 UIKit 0x1865390d0 -[UITableView _rectChangedWithNewSize:oldSize:] + 996
7 UIKit 0x186546df4 -[UITableView setBounds:] + 256
8 UIKit 0x18647a2bc -[UIScrollView setContentOffset:] + 424
9 UIKit 0x1865382bc -[UITableView setContentOffset:] + 300
10 UIKit 0x186780a3c -[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary] + 60
11 UIKit 0x18677ab5c -[UIScrollView _updateForChangedScrollRelatedInsets] + 48
12 UIKit 0x18651d5ac -[UIScrollView setContentInset:] + 116
13 UIKit 0x186546c50 -[UITableView setContentInset:] + 132
14 UIKit 0x1865bf250 -[UIScrollView(UIScrollViewInternal) _adjustForAutomaticKeyboardInfo:animated:lastAdjustment:] + 348
15 UIKit 0x1865bf0b8 -[UITableView _adjustForAutomaticKeyboardInfo:animated:lastAdjustment:] + 108
16 UIKit 0x186d50380 -[UIAutoRespondingScrollViewControllerKeyboardSupport _adjustScrollViewForKeyboardInfo:] + 288
17 Foundation 0x18211e44c __NSFireDelayedPerform + 428
18 CoreFoundation 0x1817215f4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 28
19 CoreFoundation 0x181721298 __CFRunLoopDoTimer + 884
20 CoreFoundation 0x18171e9ac __CFRunLoopRun + 1520
21 CoreFoundation 0x18164d680 CFRunLoopRunSpecific + 384
22 GraphicsServices 0x182b5c088 GSEventRunModal + 180
23 UIKit 0x1864c4d90 UIApplicationMain + 204
24 MyApp 0x100094ef8 main (AppDelegate.swift:15)
25 libdispatch.dylib 0x1811ee8b8 (Missing
Along with this, this is the cellForRow function that I have
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.section < 2 {
let cell = tableView.dequeueReusableCellWithIdentifier("FriendCell", forIndexPath: indexPath) as! FriendTableViewCell
cell.tag = indexPath.row
var user: TetherUser!
if searching {
user = searchedUsers[indexPath.row]
} else {
if indexPath.section == 0 {
user = users[indexPath.row]
cell.actionButton.friendIsContact = false
} else if indexPath.section == 1 {
user = contactsWithApp[indexPath.row]
cell.actionButton.friendIsContact = true
}
}
user.tag = indexPath.row
cell.nameLabel.text = user.fullName
cell.profileImageView.image = nil
user.profileImage { (image) -> Void in
if user.tag == cell.tag {
cell.profileImageView.image = image
}
}
if let currentUserID = TetherManager.sharedInstance.currentTetherUser?.objectId {
cell.actionButton.type = user.relationToUserWithID(currentUserID)
cell.actionButton.tag = indexPath.row
cell.actionButton.delegate = self
switch user.relationToUserWithID(currentUserID) {
case .None:
cell.actionButton.button.setImage(UIImage(named: "AddFriend"), forState: .Normal)
break
case .SentFriendRequest:
cell.actionButton.button.setImage(UIImage(named: "ReceivedFriendRequest"), forState: .Normal)
break
case .ReceivedFriendRequest:
cell.actionButton.button.setImage(UIImage(named: "PendingFriendRequest"), forState: .Normal)
break
case .Friends:
cell.actionButton.button.setImage(UIImage(named: "RemoveFriend"), forState: .Normal)
break
}
}
return cell
} else {
//Contacts
let cell = tableView.dequeueReusableCellWithIdentifier("ContactCell", forIndexPath: indexPath) as! ContactTableViewCell
cell.contact = addressBookContacts[indexPath.row]
cell.delegate = self
return cell
}
}
You will need to create the User object for the case for when indexPath.section == 2 as you have 3 sections. You will need to ensure the 'user' object is properly initialised in this code block (refer to inline comment in the code)
var user: TetherUser!
if searching {
user = searchedUsers[indexPath.row]
} else {
if indexPath.section == 0 {
user = users[indexPath.row]
cell.actionButton.friendIsContact = false
} else if indexPath.section == 1 {
user = contactsWithApp[indexPath.row]
cell.actionButton.friendIsContact = true
} else if indexPath.section == 2 {
// Add code here to ensure user has proper value.
}
}
I have this "specialized" error also. The crashes only happen on iOS 8.0 and 8.1. This is a part of my stack trace.
Crashed: com.apple.main-thread
0 Viki 0x10027bb28 specialized LoginFlowSocialButton.traitCollectionDidChange(UITraitCollection?) -> () + 4297243432
1 Viki 0x10027ad30 @objc LoginFlowSocialButton.traitCollectionDidChange(UITraitCollection?) -> () (LoginFlowButton.swift)
2 UIKit 0x18a696cd4 -[UIView _processTraitsDidChangeRecursively:forceNotification:] + 124
3 UIKit 0x18a3d05f4 __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke + 348
4 UIKit 0x18a3d0408 -[UIView(Hierarchy) _postMovedFromSuperview:] + 484
5 UIKit 0x18a3dbea4 -[UIView(Internal) _addSubview:positioned:relativeTo:] + 1724
6 UIKit 0x18a694f34 -[UIView initWithCoder:] + 756
...
I try downloading one of iOS simulators with those versions and test again. Turns out the crash is from using a forced unwrapped var but found nil
in traitCollectionDidChange
function.
So the lesson here is just that the specialized
function in the error message may not point to the exact problem. You can try look more into that function and see what went wrong in there.
Hope that helps. :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With