【问题标题】:Type 'NSObject' has no member 'copy'类型“NSObject”没有成员“副本”
【发布时间】:2017-01-24 20:11:45
【问题描述】:

我刚刚更新到 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
  }
}

【问题讨论】:

  • 应该是UIResponder.copy(_:),或者只是copy(_:)
  • @dan 谢谢修复!

标签: ios swift xcode8


【解决方案1】:

copy 方法不带参数,所以可能需要写成:

#selector(NSObject.copy)

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

【讨论】:

  • 对不起,如果我很密集,但我的复制方法没有一个参数发送者吗?此外,添加的解决方案解决了该问题。
  • @chickenparm,对不起,我错过了上下文,只是看到了NSObject 的东西。您正在搜索的copy(_:)(在丹的回答中明确指出)是另一个copy。我应该仔细看看你的帖子就注意到了。请记住这个答案以备将来用例使用...
【解决方案2】:

这样试试

#selector(UILabel.copy(_:))

【讨论】:

  • 这行得通。他作为评论添加的丹的解决方案也有效。谢谢!
【解决方案3】:

我遇到了同样的问题。我修复了它:

#selector(UIResponderStandardEditActions.copy(_:))

【讨论】:

    【解决方案4】:

    在从 Swift 2.2 升级到 Swift 3 后,我遇到了类似的错误Type 'NSObject' has no member 'paste',我能够以与 Dan 上述评论相同的方式解决它。

    斯威夫特 2

    #selector(NSObject.paste(_:))
    

    斯威夫特 3

    #selector(paste(_:))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-20
      • 2015-08-14
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多