我有SKPhysicsBody的自定义扩展程序
extension SKPhysicsBody {
func hasCategory(_ searchedCategory: PhysicsCategory) -> Bool {
let haystack = categoryBitMask
let needle = searchedCategory.rawValue
return haystack & needle == needle
}
func addCollisionWithCategory(_ category: PhysicsCategory) {
collisionBitMask = collisionBitMask | category.rawValue
}
func addContactingWithCategory(_ category: PhysicsCategory) {
contactTestBitMask = contactTestBitMask | category.rawValue
}
func removeContactingWithCategory(_ category: PhysicsCategory) {
if contactTestBitMask & category.rawValue == category.rawValue {
contactTestBitMask = contactTestBitMask ^ category.rawValue
}
}
}
工作得很好。昨天我更新了High Sierra OS,更新了项目的POD。之后,我在SKPhysicsBody扩展中添加了一个新方法,并更新了项目代码,以便在某些地方使用这种新方法
func resetBitmasks() {
categoryBitMask = 0
collisionBitMask = 0
contactTestBitMask = 0
fieldBitMask = 0
}
现在,每当我尝试在设备/模拟器上运行代码时,我都会收到错误
-[PKPhysicsBody resetBitmasks]: unrecognized selector sent to instance 0x7fb4d33176c0
关键问题是
所有以前存在的扩展方法 - hasCategory(),addCollisionWithCategory(),...等工作得很好,就像之前做的那样;我通过在resetBitmasks()之前调用这些方法来检查它;这些以前的方法在重命名后仍然可以使用
尝试重命名resetBitmasks()以避免可能的名称冲突 - 没有帮助
为SKPhysicsBody扩展创建了一个测试方法,如:func lol(){ 打印(" LOL")}所以这个新方法也触发了无法识别的选择器异常
重新安装xCode,重新安装POD - nope,无法正常工作
我在项目中使用的所有其他扩展程序都运行得很好,无论我使用的是以前的'方法或新创建的
总结以上所述,问题只发生在SKPhysicsBody扩展新添加的方法上。说'新添加'我的意思是系统(和xCode)更新后添加的方法 - 仍然,我无法确定此更新本身是否会导致问题,因为我很长时间没有向SKPhysicsBody添加新方法,所以我没有机会遇到问题。