【问题标题】:Facebook SDK IOS xcodeFacebook SDK IOS xcode
【发布时间】:2015-06-29 01:31:35
【问题描述】:

大家好,我正在使用 Xcode 制作 iOS 应用程序。 我想实现 Facebook 登录并获取用户名和 facebookid 并将其发送到 webview 链接,这可能吗?

第一个问题是,即使按照此链接上的 Facebook 指南:https://developers.facebook.com/docs/ios/getting-started 我不能让 Facebook 登录运行,iOS 模拟器启动但它以以下输出消息结束:

2015-04-21 19:51:20.069 DONAT[3899:96245] +[FBSDKButton defaultIcon]: unrecognized selector sent to class 0x103800908
2015-04-21 19:51:20.073 DONAT[3899:96245] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[FBSDKButton defaultIcon]: unrecognized selector sent to class 0x103800908'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001040e9f35 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000103d82bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x00000001040f0f4d +[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3   CoreFoundation                      0x000000010404927c ___forwarding___ + 988
    4   CoreFoundation                      0x0000000104048e18 _CF_forwarding_prep_0 + 120
    5   DONAT                               0x00000001037b6207 -[FBSDKButton configureButton] + 47
    6   DONAT                               0x00000001037b5509 -[FBSDKButton awakeFromNib] + 73
    7   UIKit                               0x00000001049dee75 -[UINib instantiateWithOwner:options:] + 2010
    8   UIKit                               0x000000010483df98 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
    9   UIKit                               0x000000010483e588 -[UIViewController loadView] + 109
    10  UIKit                               0x000000010483e7f9 -[UIViewController loadViewIfRequired] + 75
    11  UIKit                               0x000000010483ec8e -[UIViewController view] + 27
    12  UIKit                               0x000000010475dca9 -[UIWindow addRootViewControllerViewIfPossible] + 58
    13  UIKit                               0x000000010475e041 -[UIWindow _setHidden:forced:] + 247
    14  UIKit                               0x000000010476a72c -[UIWindow makeKeyAndVisible] + 42
    15  UIKit                               0x0000000104715061 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2628
    16  UIKit                               0x0000000104717d2c -[UIApplication _runWithMainScene:transitionContext:completion:] + 1350
    17  UIKit                               0x0000000104716bf2 -[UIApplication workspaceDidEndTransaction:] + 179
    18  FrontBoardServices                  0x0000000107bc42a3 __31-[FBSSerialQueue performAsync:]_block_invoke + 16
    19  CoreFoundation                      0x000000010401f53c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    20  CoreFoundation                      0x0000000104015285 __CFRunLoopDoBlocks + 341
    21  CoreFoundation                      0x0000000104015045 __CFRunLoopRun + 2389
    22  CoreFoundation                      0x0000000104014486 CFRunLoopRunSpecific + 470
    23  UIKit                               0x0000000104716669 -[UIApplication _run] + 413
    24  UIKit                               0x0000000104719420 UIApplicationMain + 1282
    25  DONAT                               0x000000010378d743 main + 115
    26  libdyld.dylib                       0x00000001068bc145 start + 1
    27  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

这是我的应用委托.h

#import <UIKit/UIKit.h>



@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end

这是我的应用委托.m

#import "AppDelegate.h"
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>




@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    [FBSDKLoginButton class];
    return YES;
} //AGGIUNTO DA FB DEVELPER

- (void)applicationWillResignActive:(UIApplication *)application {

}

- (void)applicationDidEnterBackground:(UIApplication *)application {

}

- (void)applicationWillEnterForeground:(UIApplication *)application {

}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [FBSDKAppEvents activateApp]; //AGGIUNTO DA FACEBOOK DEVELOPER GUIDE
}

- (void)applicationWillTerminate:(UIApplication *)application {
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation];
}//AGGIUNTO DA fbdeveloper


@end

在我的 Main.storyboard 中,我有一个名为 Login 的视图控制器,以及他的相关 Login.h 和 Login.m 以及 View 告诉 Facebook 的 FBSDKButton 类

编辑

可以登录,但登录后我无法显示另一个视图控制器

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                            user:(id<FBGraphUser>)user {

    NSString * storyboardName = @"dashBoardViewController";
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
    UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"dashBoardViewController"];
    [self presentViewController:vc animated:YES completion:nil];
}

这是我现在的方法,视图控制器有一个故事板 id = dashBoardViewController 但它仍然无法正常工作

【问题讨论】:

  • 请记住,您的模拟器可能没有 Facebook 帐户,因此可能会崩溃。你应该在没有 Facebook 工作和安装的设备上试试这个
  • FBLoginView 来自过时的 Facebook iOS SDK 版本。您可以升级到 iOS SDK 4.0.1 并在这里分享您遇到的任何错误吗?第二个问题听起来不像是由 Facebook 引起的。

标签: ios objective-c xcode facebook facebook-graph-api


【解决方案1】:

这可能与您的问题不太相符,但至少是相关的。虽然 Facebook 的说明说将按钮的类设置为 FBSDKButton,但正如您在上面描述的那样,这不起作用并崩溃。将按钮的类设置为FBSDKLoginButton 似乎可行。

【讨论】:

  • 这应该是这个特定问题的最佳答案 - FBSDKButton 崩溃但 FBSDKLoginButton 有效。非常感谢!
【解决方案2】:

我也遇到了同样的错误。

经过检查,我的项目中似乎需要:FBSDKCoreKit、FBSDKLoginKit 和 FBSDKShareKit。

如果你使用 cocoapods,这是 Podfile 中的这一行:

pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

pod install 之后,将其添加到您的桥接头.h 文件中:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

在你的故事板中,定义一个类类型为FBSDKLoginButton的视图:

【讨论】:

    【解决方案3】:

    我也面临同样的问题。您需要在视图控制器中导入 FBSDKLoginKit,然后使用 FBSDKLoginButton。找到被剪掉的代码

    导入 FBSDKLoginKit

    类视图控制器:UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
       let fbButton = FBSDKLoginButton()
        fbButton.center = self.view.center
        self.view.addSubview(fbButton)
        // Do any additional setup after loading the view, typically from a nib.
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多