类型“NSObject”没有成员“copy”。

6
我刚刚升级到Xcode 8,现在在我的项目中出现错误:
“Type 'NSObject' has no member 'copy'.”
在升级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
  }
}

5
可能应该是UIResponder.copy(_:),或者只是copy(_:) - dan
@dan 谢谢,问题已解决! - chickenparm
4个回答

4
升级到Swift 3后,我遇到了类似的错误Type 'NSObject' has no member 'paste'。然而,我按照Dan在评论中提到的方法解决了这个问题。
Swift 2
#selector(NSObject.paste(_:))

Swift 3

#selector(paste(_:))

2
< p > copy 方法不需要参数,因此您可能需要这样写:

#selector(NSObject.copy)

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

抱歉如果我有点迟钝,但是我的复制方法不是只有一个参数sender吗?此外,Dan添加的解决方案修复了这个问题。 - chickenparm
@chickenparm,抱歉,我一直缺乏上下文,只看到了NSObject的某些内容。你正在寻找的copy(_:)(正如dan的答案中明确指出的那样)是另一个copy。如果我再仔细看一下你的帖子,我应该会注意到它。请记住这个答案,以备将来使用... - OOPer

2

我遇到了同样的问题。我通过以下方式解决了:

#selector(UIResponderStandardEditActions.copy(_:))

0
尝试这样做:

像这样

#selector(UILabel.copy(_:))

1
这个可行。丹的解决方案,他在评论中添加了,也是可行的。谢谢! - chickenparm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接