I am trying to implement a Facebook login option in my App. I followed all the instructions on the Parse website and on the Facebook developer page. I added the frameworks, modified the plist file and added the proper code but when I launch the App I get this exception:
2015-07-14 17:50:08.939 ########[35815:2144465] -[ParseManager coreManager]: unrecognized selector sent to instance 0x7f9cdadad720
2015-07-14 17:50:08.953 ########[35815:2144465] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ParseManager coreManager]: unrecognized selector sent to instance 0x7f9cdadad720'
*** First throw call stack:
(
0 CoreFoundation 0x000000010a3cdc65 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010a066bb7 objc_exception_throw + 45
2 CoreFoundation 0x000000010a3d50ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x000000010a32b13c ___forwarding___ + 988
4 CoreFoundation 0x000000010a32acd8 _CF_forwarding_prep_0 + 120
5 ######## 0x0000000105c822f0 +[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:] + 151
6 ######## 0x0000000105954c6c -[SMAppDelegate application:didFinishLaunchingWithOptions:] + 1132
7 UIKit 0x00000001088ef748 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 240
8 UIKit 0x00000001088f0357 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2540
9 UIKit 0x00000001088f319e -[UIApplication _runWithMainScene:transitionContext:completion:] + 1349
10 UIKit 0x00000001088f2095 -[UIApplication workspaceDidEndTransaction:] + 179
11 FrontBoardServices 0x000000010be2b5e5 __31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21
12 CoreFoundation 0x000000010a30141c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
13 CoreFoundation 0x000000010a2f7165 __CFRunLoopDoBlocks + 341
14 CoreFoundation 0x000000010a2f6f25 __CFRunLoopRun + 2389
15 CoreFoundation 0x000000010a2f6366 CFRunLoopRunSpecific + 470
16 UIKit 0x00000001088f1b02 -[UIApplication _run] + 413
17 UIKit 0x00000001088f48c0 UIApplicationMain + 1282
18 ######## 0x00000001059c4a9f main + 111
19 libdyld.dylib 0x000000010a918145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
These are the Frameworks and libraries I actually have on my project:

The weird thing is that if I create a new project from zero I have no problems at all and the login works correctly.
Edit: I'm still trying to solve this issue. I managed to launch the App without errors by changing the PFFacebookUtils initialization code from[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions]; to [PFFacebookUtils initialize]; but then if I try to login through a button with the code [PFFacebookUtils logInInBackgroundWithReadPermissions:nil block:^(PFUser *user, NSError *error) {}another exception appears Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'You must initialize PFFacebookUtils with a call to +initializeFacebookWithApplicationLaunchOptions'
I'm adding the code I'm using as suggested:
In my AppDelegate.m
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <ParseFacebookUtilsV4/PFFacebookUtils.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
// PARSE
[Parse setApplicationId: SMParseApplicationId
clientKey: SMParseClientId];
// FACEBOOK
[PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions];
[PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];
//*****
// GOOGLE MAP API
[GMSServices provideAPIKey: SMGoolgeMapApiKey];
//*****
return [[FBSDKApplicationDelegate sharedInstance] application:application
didFinishLaunchingWithOptions:launchOptions];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[FBSDKAppEvents activateApp];
}
I've went through this same struggle and tried many different ways to go about setting up Parse with Facebook Login. I have to say though, I have no experience with Obj-C, but here is my working Swift Parse w/ Facebook Login app that I hope can give you some insight.
In my AppDelegate.swift:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {
Parse.setApplicationId("ID", clientKey:"KEY")
PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)
FBSDKProfile.enableUpdatesOnAccessTokenChange(true)
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
func applicationDidBecomeActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
In my LoginViewController.swift:
//My custom storyboard button
@IBAction func fbLogin(sender: AnyObject) {
var permissions = ["public_profile", "email"]
PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) {
(user: PFUser?, error: NSError?) -> Void in
if let user = user {
if user.isNew {
println("User signed up and logged in through Facebook!")
self.facebookSignUp(user)
} else {
println("User logged in through Facebook!")
self.performSegueWithIdentifier("LoginSuccessful", sender: self)
}
} else {
println("Uh oh. The user cancelled the Facebook login.")
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
if PFUser.currentUser() != nil {
moveToNextView() //Segue to next ViewController
}
}
func facebookSignUp(user: PFUser) -> Void{
var request = FBSDKGraphRequest(graphPath: "me", parameters: nil)
var userID:String
request.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
if error == nil {
user["fullName"] = result["name"]
var facebookUserID = result["id"] as! String
user["facebookUserID"] = facebookUserID
user.save()
self.performSegueWithIdentifier("LoginSuccessful", sender: self)
} else {
println(error)
PFUser.logOut()
}
}
}
There has been a bug in the Parse SDK, here is the bug report with the following answer to fix it.
1) Go to PFFacebookUtils.h
2) change:
(void)initializeFacebookWithApplicationLaunchOptions:(NSDictionary *)launchOptions;
to:
(void)initializeFacebookWithApplicationLaunchOptions:(PF_NULLABLE NSDictionary *)launchOptions;
However, Parse did release a newer version of their SDK (v1.7.2), which should resolve the problem. Please check what SDK you are using.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With