2016-09-16 100 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與我合作 –

相關問題