2016-09-16 106 views
4

我刚刚更新到Xcode中8,现在我得到的错误在我的项目类型“NSObject的”没有成员“复制”

类型“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 
    } 
} 
+5

这也许应该是'UIResponder.copy(_ :)'或'只是副本(_ :)' – dan

+0

@丹感谢那些固定它! – chickenparm

回答

2

copy方法不带参数,所以你可能需要将其写为:

#selector(NSObject.copy) 

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

+0

对不起,如果我密集,但我的复制方法没有一个参数发件人?此外,丹解决方案解决了这个问题。 – chickenparm

+0

@chickenparm,对不起,我错过了上下文,只是看到'NSObject'的东西。你正在搜索的'copy(_ :)'(在dan的回答中清楚地指出)是另一个'copy'。我应该多注意一下你的帖子。请记住这个答案,以备将来使用...... – OOPer

0

尝试这样

#selector(UILabel.copy(_:)) 
+1

这工作。他作为评论添加的丹的解决方案也起作用。谢谢! – chickenparm

2

我有同样的问题。

#selector(UIResponderStandardEditActions.copy(_:)) 
3

我有一个类似的错误类型“NSObject的”没有成员“粘贴”从雨燕2.2升级到斯威夫特3之后,我能够解决它以同样的方式为丹:我有固定它以上评论。

斯威夫特2

#selector(NSObject.paste(_:)) 

斯威夫特3

#selector(paste(_:)) 
+0

谢谢,Swift 3与我合作 –

相关问题