输入' NSObject'没有会员' copy'

时间:2016-09-16 14:38:38

标签: ios swift xcode8

我刚刚更新到Xcode 8,现在我在项目中收到了错误

输入' NSObject'没有会员'复制'

在升级Xcode之前,我没有收到此错误。

注意:我还在使用Swift 2.3。我将UILabel子类化,以便我可以允许用户在长按上复制标签上的文本。以下是我的代码。错误发生在该行:

if action == #selector(NSObject.copy(_:))

以下是完整代码:

class MCCopyableLabel: UILabel {

  override init(frame: CGRect) {
    super.init(frame: frame)
    sharedInit()
  }

  required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
    sharedInit()
  }

  func sharedInit() {
    userInteractionEnabled = true
    addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(MCCopyableLabel.showMenu(_:))))
  }

  func showMenu(sender: AnyObject?) {
    becomeFirstResponder()
    let menu = UIMenuController.sharedMenuController()
    if !menu.menuVisible {
      menu.setTargetRect(bounds, inView: self)
      menu.setMenuVisible(true, animated: true)
    }
  }

  override func copy(sender: AnyObject?) {
    let board = UIPasteboard.generalPasteboard()
    board.string = text
    let menu = UIMenuController.sharedMenuController()
    menu.setMenuVisible(false, animated: true)
  }

  override func canBecomeFirstResponder() -> Bool {
    return true
  }

  override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
    if action == #selector(NSObject.copy(_:)) {
      return true
    }
    return false
  }
}

4 个答案:

答案 0 :(得分:4)

我有一个类似的错误类型'NSObject'在从Swift 2.2升级到Swift 3后没有成员'粘贴',我能够像Dan上面的评论那样解决它。< / p>

Swift 2

#selector(NSObject.paste(_:))

Swift 3

#selector(paste(_:))

答案 1 :(得分:2)

copy方法不带参数,因此您可能需要将其写为:

#selector(NSObject.copy)

符号#selector(NSObject.copy(_:))适用于一个参数没有标签的方法。

答案 2 :(得分:2)

我有同样的问题。我修好了:

#selector(UIResponderStandardEditActions.copy(_:))

答案 3 :(得分:0)

试试这个

#selector(UILabel.copy(_:))