【问题标题】:yellow Warnings : Conditional cast from UITextDocumentProxy to UIKeyInput always succeeds黄色警告:从 UITextDocumentProxy 到 UIKeyInput 的条件转换总是成功
【发布时间】:2015-07-07 07:36:53
【问题描述】:

我正在使用键盘,我刚刚安装了 xcode 7 beta 2 然后我收到很多警告。

超过 24 个黄色错误我认为它会导致键盘崩溃 关于 xcode 6.4 无错误无键盘课程

我发现解决这些错误有困难。

警告:

从 UITextDocumentProxy 到 UIKeyInput 的条件转换总是成功

func handleBtnPress(sender: UIButton) {
    if let kbd = self.keyboard {
        if let textDocumentProxy = kbd.textDocumentProxy as? UIKeyInput {
            textDocumentProxy.insertText(sender.titleLabel!.text!)
        }

        kbd.hideLongPress()

        if kbd.shiftState == ShiftState.Enabled {
            kbd.shiftState = ShiftState.Disabled
        }

        kbd.setCapsIfNeeded()
    }
}

警告:

从 UITouch 到 UITouch 的条件转换总是成功

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    for obj in touches {
        if let touch = obj as? UITouch {
            let view = self.touchToView[touch]

            let touchPosition = touch.locationInView(self)

            if self.bounds.contains(touchPosition) {
                self.handleControl(view, controlEvent: .TouchUpInside)
            }
            else {
                self.handleControl(view, controlEvent: .TouchCancel)
            }

            self.touchToView[touch] = nil
        }
    }
}

【问题讨论】:

  • 只是一点点信息:“黄色错误”实际上是警告 :) (y) 请告诉我们警告发生在哪一行。

标签: ios xcode swift xcode7 ios9


【解决方案1】:

这些不是错误,它们只是警告,它们可能不是导致崩溃的原因,但是您可以通过执行以下操作来解决这两个示例:

UITextDocumentProxy 协议无论如何都符合UIKeyInput,因此无需将kbd.textDocumentProxy 转换为UIKeyInput

您将能够在没有任何警告的情况下执行以下操作:

func handleBtnPress(sender: UIButton) {
    if let kbd = self.keyboard {
        kbd.textDocumentProxy.insertText(sender.titleLabel!.text!)
        kbd.hideLongPress()

        if kbd.shiftState == ShiftState.Enabled {
            kbd.shiftState = ShiftState.Disabled
        }

        kbd.setCapsIfNeeded()
    }
}

obj 相同,编译器已经知道它是UITouch 对象,因此无需强制转换,您可以将所有代码从if let touch = obj as? UITouch 语句中取出,如下所示:

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    for touch in touches {
        let view = self.touchToView[touch]

        let touchPosition = touch.locationInView(self)

        if self.bounds.contains(touchPosition) {
            self.handleControl(view, controlEvent: .TouchUpInside)
        }
        else {
            self.handleControl(view, controlEvent: .TouchCancel)
        }

        self.touchToView[touch] = nil
    }
}

小提示:alt点击一个变量,看看它被解析为什么类型:

【讨论】:

  • 你能告诉我如何结合你编码的答案 ״textDocumentProxy״?
  • 现在好多了,非常感谢:)
  • 也许你知道是什么原因导致键盘崩溃?当我从模拟器中移动鼠标时会发生这种情况
  • 不知道,抱歉...如果您在网站搜索中没有找到任何有用的信息,可能值得就该问题提出一个单独的问题 :)
猜你喜欢
  • 1970-01-01
  • 2019-12-17
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
相关资源
最近更新 更多