应用程序在发布模式下的异常,而不是在调试模式下
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-C
,id
字段是 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
我的 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-C
,id
字段是 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