将按钮的目标方法设置为来自另一个类的函数

时间:2016-08-16 21:16:54

标签: ios swift

我有一个从Facebook获取照片信息的功能。我尝试通过将它添加到另一个类并将按钮的目标函数设置为该类函数来抽象它。

所以我有一个单身类

class FacebookManager  {

static let sharedInstance = FacebookManager()

func getAlbums() {

    var request: FBSDKGraphRequest = FBSDKGraphRequest.init(graphPath: "/\(facebookID!)/albums", parameters: ["fields": "cover_photo, name, description"])
    request.startWithCompletionHandler({ (connection, result, error) -> Void in
        // do stuff
    })

}

和viewcontroller中用于调用该函数的按钮的方法

dummyButton?.addTarget(FacebookManager.self, action: Selector("getAlbums"), forControlEvents: .TouchUpInside)

但点击按钮后我收到错误

  

2016-08-17 00:12:21.599 Lovrr [11807:3832289] *** NSForwarding:警告:类'app.FacebookManager'的对象0x10717c888没有实现methodSignatureForSelector: - 提前出现问题   无法识别的选择器+ [app.FacebookManager getAlbums]

在stackoverflow的一些主题中,我看到了在FacebookManager中继承NSObject的建议。这样做后我得到另一个错误

  

[app.FacebookManager getAlbums]:无法识别的选择器发送到类0x1047026f0   2016-08-17 00:13:49.469 app [11892:3834005] ***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'+ [app.FacebookManager getAlbums]:无法识别的选择器发送到类0x1047026f0'

如何正确地做我想要的事情?

1 个答案:

答案 0 :(得分:2)

你的目标是错误的:

dummyButton?.addTarget(FacebookManager.self, action: Selector("getAlbums"), forControlEvents: .TouchUpInside)

FacebookManager.self表示静态级别。 getAlbums是一种类方法。 => 无法识别的选择器

修复:

dummyButton?.addTarget(FacebookManager.sharedInstance, action: Selector("getAlbums"), forControlEvents: .TouchUpInside)