Swift Specialized Crash

Below is a stacktrace crash that persists in one of my applications. I donโ€™t know how to fix it, and it doesnโ€™t always happen? PLEASE, HELP:)

Is this something related to 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 a cellForRow function, in which

 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 } } 
+5
source share
2 answers

You will need to create a User object for the case when indexPath.section == 2, since you have 3 sections. You will need to make sure that the "user" object is correctly initialized in this code block (see the built-in 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. } } 
+1
source

I also have this "specialized" error. Accidents occur only on iOS 8.0 and 8.1. This is 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 am trying to download one of the iOS simulators with these versions and check again. It turns out that the crash comes from using a forcedly deployed var, but found nil in traitCollectionDidChange .

So, the lesson is that the specialized function in the error message may not indicate the exact problem. You can try to look more at this feature and see what is wrong there.

Hope this helps. :)

0
source

Source: https://habr.com/ru/post/1242336/


All Articles