我的didSelectRowAtIndexPath
方法中有例外,我不太清楚为什么。我向用户显示了他们可以选择的可能性列表,UITableView
是根据存储在Core Data中的值填充的。当前所选项目具有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
这里有什么我想念的吗?为什么这种方法会崩溃?我只是存储当前选择的ID,然后重新加载数据,以便在重新加载后显示复选标记。我有什么东西在这里失踪吗?它应该只是获取新的ID,然后重新加载数据。
我使用的CoreDataObject
来自Objective-C
,id
字段为NSNumber
。
我尝试了以下其他解决方案:
Crash when calling selectRowAtIndexPath:animated:scrollPosition:
iphone app crash at -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]
答案 0 :(得分:0)
如果有其他人有这个问题。 currentSelected
是一个声明为Int
的全局变量,value
对象的id
字段是`NSNumber。我将其更改为以下内容并且有效:
self.currentSelected = value.id.integerValue