Reputation: 6723
I have a function that fetches photos info from facebook. I try to abstract it by adding it to another class and setting target function of the button to that class function.
So I have a singleton class
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
})
}
and a method in viewcontroller for button that calls that function
dummyButton?.addTarget(FacebookManager.self, action: Selector("getAlbums"), forControlEvents: .TouchUpInside)
but after tapping on button I get an error
2016-08-17 00:12:21.599 Lovrr[11807:3832289] *** NSForwarding: warning: object 0x10717c888 of class 'app.FacebookManager' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector +[app.FacebookManager getAlbums]
in some topic in stackoverflow I saw an advice of subclassing NSObject
in FacebookManager. After doing this I get another error
[app.FacebookManager getAlbums]: unrecognized selector sent to class 0x1047026f0 2016-08-17 00:13:49.469 app[11892:3834005] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[app.FacebookManager getAlbums]: unrecognized selector sent to class 0x1047026f0'
How to do what I want properly ?
Upvotes: 0
Views: 1308
Reputation: 10317
Your target is wrong:
dummyButton?.addTarget(FacebookManager.self, action: Selector("getAlbums"), forControlEvents: .TouchUpInside)
FacebookManager.self
means static level. getAlbums
is a class method. =>
unrecognized selector
Fix with:
dummyButton?.addTarget(FacebookManager.sharedInstance, action: Selector("getAlbums"), forControlEvents: .TouchUpInside)
Upvotes: 2