应用程序在发布模式下的异常,而不是在调试模式下

exception for app in release mode, not in debug mode

我的 didSelectRowAtIndexPath 方法出现异常,我不太清楚为什么。我向用户展示了他们可以 select 的可能性列表,UITableView 是根据存储在核心数据中的值填充的。当前 selected 项目有一个 Checkmark 指示符。我的方法如下:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    let value = self.fetchedResultsController.objectAtIndexPath(indexPath) as CoreDataObject
    currentSelected = value.id as Int

    self.tableView.reloadData()
}

在开发模式下没问题,但在生产和测试飞行中,它会在这个方法中崩溃。崩溃日志如下:

Crashed Thread 0 :
0   CoreFoundation  0x25f41a7d  _CFRetain + 165
1   UIKit   0x29619d67  -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 919
2   UIKit   0x296cb9df  -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 195
3   UIKit   0x2957da25  _applyBlockToCFArrayCopiedToStack + 309
4   UIKit   0x294f982b  _afterCACommitHandler + 459
5   CoreFoundation  0x26007d95  __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 21
6   CoreFoundation  0x26005453  __CFRunLoopDoObservers + 279
7   CoreFoundation  0x2600585b  __CFRunLoopRun + 915
8   CoreFoundation  0x25f533c1  CFRunLoopRunSpecific + 477
9   CoreFoundation  0x25f531d3  CFRunLoopRunInMode + 107
10  GraphicsServices    0x2d3510a9  GSEventRunModal + 137
11  UIKit   0x29562fa1  UIApplicationMain + 1441

这里有什么我遗漏的吗?为什么这个方法会崩溃?我只是存储当前 selected ID,然后重新加载数据,以便它可以在重新加载后显示复选标记。我在这里缺少什么吗?应该很简单,只要获取新的id,然后重新加载数据即可。

我使用的 CoreDataObject 来自 Objective-Cid 字段是 NSNumber.

我尝试了以下其他解决方案:

Crash when calling selectRowAtIndexPath:animated:scrollPosition:

iphone app crash at -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]

iOS - didSelectRowAtIndexPath causes crash in app

以防其他人遇到此问题。 currentSelected 是一个声明为 Int 的全局变量,value 对象有一个 id 字段,即 `NSNumber。我将其更改为以下并且有效:

self.currentSelected = value.id.integerValue