【发布时间】:2015-06-08 15:58:18
【问题描述】:
我在 iOS7 设备上运行我的应用程序时遇到 EXC_BREAKPOINT (EXC_ARM_BREAKPOINT, subcode=0xe7ffdefe) 错误。 问题是,它在 iOS7 模拟器上运行流畅。
通过使用断点,我发现错误出现在第 6 行。
required init(coder aDecoder: NSCoder) {
personPicker = ABPeoplePickerNavigationController()
super.init(coder: aDecoder)
personPicker.peoplePickerDelegate = self
}
/*error line*/ @IBAction func BPressed(sender: AnyObject) {
self.presentViewController(personPicker, animated: true, completion: nil)
}
这个错误是新的,直到我将这些行添加到代码中后才出现在我的设备上;
let url = NSURL(string: urlPath)
let request = NSURLRequest(URL: url!)
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
还有;调试器将错误指向这一行:
0x16a7f0: trap
并在控制台中给出这个输出:
致命错误:尝试从空指针创建非托管实例
即使我在情节提要中没有更改任何内容,此错误也会导致设备出现黑屏。
感谢您抽出宝贵时间。
编辑:这个错误在搜索引擎中显示没有结果,但我认为它可能与obj-c有关。
【问题讨论】:
-
我得到了完全相同的错误(包括子代码),但我在控制台中没有看到任何内容。它在我的 iPhone 6 上运行良好,但在我的 4S 和 iPod Touch 上崩溃。在模拟器和实际设备上似乎都是这种情况。对我来说有问题的行是对坐标数组(它是 x 和 y Ints 的结构)的追加调用。
-
您是否在代码中的任何位置使用 Int(或任何其他数据类型),该值可能会获得如此大的值以至于您有点溢出?正如我所说,我只在 4S 和 iTouch(32 位设备)上遇到了问题,但它在我的 iPhone 6 上运行良好。嗯,我使用普通 Ints 来存储来自 arc4random() 的值。将其更改为 UInt32 解决了我的问题。 stackoverflow.com/questions/28177192/…
-
确实是一个不错的视角。但是ios模拟器不是模拟32位的吗?我的代码实际上使用了很多变量,但是 int 的最大值是 13 位,string 的最大值是 40。
-
那不是问题吗?我的理解是,32 位设备上的 Int 最多只能存储 2^31 或 2 147 483 648 的值,即 10 位数字。尝试在其中存储 13 位数字会导致位溢出(或在 Swift 中明显崩溃)。如果你使用 Int64 或 UInt64 会发生什么?是的,我相信模拟器确实模拟了 32 位,这就是它崩溃的原因。
-
我将使用您建议的变量类型更改这些变量类型。在iOS7模拟器上运行流畅,在iOS7 4S设备上崩溃。
标签: ios objective-c xcode swift breakpoints