每当我尝试创建特定 class 的实例时,整个应用程序都会崩溃 (EXC_BAD_ACCESS)
Whenever I try to create an Instance of a specific class the whole app crashes (EXC_BAD_ACCESS)
我的代码似乎由于无限循环而崩溃,但我找不到错误。
有人可以帮我看看代码吗?
这是我的控制器:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
let location = touch.location(in: self.view)
let x = Float(location.x)
let y = Float(location.y)
let newTouch = Touch(latitude: x,longitude: y)
TouchService().addTouch(touch: newTouch, grid: _grid)
}
}
我的模型:
import Foundation
class Touch {
var _lat: Float
var _long: Float
var _startingPoint: Touch
init(latitude lat: Float, longitude long: Float){
self._lat = lat
self._long = long
self._startingPoint = Touch(latitude: lat, longitude: long)
}
}
我想我使用 init() 函数的方式有问题。
在此先致以诚挚的问候和感谢,
克里斯
这就是您的代码的工作方式
class Touch {
var _lat: Float
var _long: Float
var _startingPoint: Touch
init(latitude lat: Float, longitude long: Float){
self._lat = lat
self._long = long
self._startingPoint = Touch(latitude: lat, longitude: long) // It invokes recursively your Touch class with no end, so it causes infinite loop
}
}
解决方案
您必须为 StartingPoint
创建不同的 class。
问题
你的初始化程序创建了一个无限循环。
//Touch(latitude: lat, longitude: long) calls the initializer again.
//Since you are inside the initializer, it creates an infinite loop.
self._startingPoint = Touch(latitude: lat, longitude: long)
评论出来,你会看到。
解决方案
为您的值(组合)创建单独的 class 或结构。
class AngularLocation {
var _lat: Float
var _long: Float
和
class Touch {
var destination: AngularLocation
var startingPoint: AngularLocation
根据您的需要进行调整。
我的代码似乎由于无限循环而崩溃,但我找不到错误。 有人可以帮我看看代码吗?
这是我的控制器:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
let location = touch.location(in: self.view)
let x = Float(location.x)
let y = Float(location.y)
let newTouch = Touch(latitude: x,longitude: y)
TouchService().addTouch(touch: newTouch, grid: _grid)
}
}
我的模型:
import Foundation
class Touch {
var _lat: Float
var _long: Float
var _startingPoint: Touch
init(latitude lat: Float, longitude long: Float){
self._lat = lat
self._long = long
self._startingPoint = Touch(latitude: lat, longitude: long)
}
}
我想我使用 init() 函数的方式有问题。
在此先致以诚挚的问候和感谢, 克里斯
这就是您的代码的工作方式
class Touch {
var _lat: Float
var _long: Float
var _startingPoint: Touch
init(latitude lat: Float, longitude long: Float){
self._lat = lat
self._long = long
self._startingPoint = Touch(latitude: lat, longitude: long) // It invokes recursively your Touch class with no end, so it causes infinite loop
}
}
解决方案
您必须为 StartingPoint
创建不同的 class。
问题
你的初始化程序创建了一个无限循环。
//Touch(latitude: lat, longitude: long) calls the initializer again.
//Since you are inside the initializer, it creates an infinite loop.
self._startingPoint = Touch(latitude: lat, longitude: long)
评论出来,你会看到。
解决方案
为您的值(组合)创建单独的 class 或结构。
class AngularLocation {
var _lat: Float
var _long: Float
和
class Touch {
var destination: AngularLocation
var startingPoint: AngularLocation
根据您的需要进行调整。