如果我尝试在iOS9中更改GKAgent2D(或其父类GKAgent)的speed参数值,我会收到此无法识别的选择器错误:
***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [GKAgent2D setSpeed:]:发送到实例的无法识别的选择器
但是在iOS10中,不会发生此错误,并且正确更改代理的速度.
我可以在一个非常简单的示例中重现错误(单视图iOS应用程序,将视图控制器代码更改为以下内容,请注意GKAgent2D或GKAgent发生错误):
import UIKit
import GameplayKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var agent = GKAgent()
agent.speed = 10
print(agent.speed)
}
}
Run Code Online (Sandbox Code Playgroud)
上面总是在线路上发生这种无法识别的选择器错误而崩溃,该线路在运行iOS9.3的模拟器上设置代理的速度,而不是iOS10.3(所有这些都在Xcode 8.3.2下).
GKAgent的速度属性记录为在iOS9下读写并受支持 - 请参阅Apple的GKAgent文档,speed属性.
我在GKAgentDelegate遇到了类似的问题,只有使用无法识别的agentWillUpdate选择器才能在iOS9上崩溃.我通过在我的代码中放入一个虚拟方法来解决这个问题:
func agentWillUpdate(_ agent: GKAgent) {
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了类似的解决方案,以新的错误,在我的GKAgent2D子类中重写速度性能,并提供一个明确的setter和getter,甚至支持由私人浮法速度参数通过Kdawg的建议,但同样的错误仍然出现当超级速度参数设置时:
class Agent:GKAgent2D {
override var speed:Float {
get {return localSpeed}
set {localSpeed = newValue}
}
private var localSpeed:Float {
get {return super.speed}
set {super.speed = newValue}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
具体来说:iOS9中关于选择器的GKAgent是否存在任何已知问题?
或者,对替代工作的任何想法?
如果可以,我想支持iOS9.它看起来像是GameplayKit中的一个错误 - 但我希望Apple对报告的回应是它在iOS10中得到修复.
已编辑
我的意思是让子类的属性 setter/getter 只覆盖基类的属性,而不尝试访问父类的 setter,如下所示:
class Agent:GKAgent2D {
private var _speed: Float = 0.0
override var speed:Float {
get {return _speed}
set {_speed = newValue}
}
}
Run Code Online (Sandbox Code Playgroud)
此时,假设GKAgentand通过其属性 getterGKAgent2d进行访问,它将从子类中重写的 getterspeed获取值。_speed这就是为什么我在评论中建议在创建该子类后尝试此操作:
var agent: GKAgent
agent = GKAgent2dSubType()
agent.speed = 10
Run Code Online (Sandbox Code Playgroud)
然后我预计,如果您尝试读出代理的属性GKAgent,它将是 10。因此,代理的预期行为可能会与您的速度正常配合。
原始 这只是一个完全的猜测(我不太熟悉这里的技术),但是你尝试过改变你的
override var speed:Float {
get {return super.speed}
set {self.speed = newValue}
}
Run Code Online (Sandbox Code Playgroud)
不引用super.speed或(顺便说一句,从您的setterself.speed进行设置不应该导致对该 setter 的无限递归调用吗?)而是引用私有支持浮点值?然后也许您将能够实例化一个类型的对象(无论您如何命名该子类)并让它工作。self.speedspeedGKAgent2dSubClass
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |