Swift:SKPhysicsBody的自定义扩展中的新方法不再起作用,抛出&PKHhysicsBody无法识别的选择器发送到实例'

时间:2018-04-02 09:09:16

标签: swift sprite-kit skphysicsbody

  1. 我有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
            }
        }
    }
    
  2. 工作得很好。昨天我更新了High Sierra OS,更新了项目的POD。之后,我在SKPhysicsBody扩展中添加了一个新方法,并更新了项目代码,以便在某些地方使用这种新方法

        func resetBitmasks() {
            categoryBitMask = 0
            collisionBitMask = 0
            contactTestBitMask = 0
            fieldBitMask = 0
        }
    
  3. 现在,每当我尝试在设备/模拟器上运行代码时,我都会收到错误

    -[PKPhysicsBody resetBitmasks]: unrecognized selector sent to instance 0x7fb4d33176c0
    
  4. 关键问题是

    • 所有以前存在的扩展方法 - hasCategory(),addCollisionWithCategory(),...等工作得很好,就像之前做的那样;我通过在resetBitmasks()之前调用这些方法来检查它;这些以前的方法在重命名后仍然可以使用

    • 尝试重命名resetBitmasks()以避免可能的名称冲突 - 没有帮助

    • 为SKPhysicsBody扩展创建了一个测试方法,如:func lol(){ 打印(" LOL")}所以这个新方法也触发了无法识别的选择器异常

    • 重新安装xCode,重新安装POD - nope,无法正常工作

    • 我在项目中使用的所有其他扩展程序都运行得很好,无论我使用的是以前的'方法或新创建的

  5. 总结以上所述,问题只发生在SKPhysicsBody扩展新添加的方法上。说'新添加'我的意思是系统(和xCode)更新后添加的方法 - 仍然,我无法确定此更新本身是否会导致问题,因为我很长时间没有向SKPhysicsBody添加新方法,所以我没有机会遇到问题。

0 个答案:

没有答案