2

我正在尝试将 FB 集成到现有的 iOS 应用程序中。

我已修改 HelloFacebookSample 应用程序以使用我的应用程序 ID、显示名称和包标识符。我可以很好地运行它并从中发布(在 iOS 6 模拟器中运行)。所以这让我相信我在 developers.facebook.com 上的设置是正确的。

接下来,我查看了示例中的应用程序委托和视图控制器中的代码,并将其复制到我自己的代码中。被执行的第一段 Facebook 代码在应用程序委托中,在applicationDidBecomeActive:. 我执行与示例应用程序相同的两行:

[FBAppEvents activateApp];
[FBAppCall handleDidBecomeActive];

如果我运行我的程序,我最终会得到EXC_BAD_ACCESS (code=2, address=0x0). 在调试导航器中,我看到:

#0  0x0253309f in objc_msgSend ()
#1  0x0251eb2e in objc_setProperty_non_gc ()
#2  0x0251ed0d in objc_setProperty ()
#3  0x00446798 in -[FBRequestMetadata setCompletionHandler:] at /Users/chrisp/tmp/build-    sdk/ios-sdk/src/FBRequestConnection.m:70
#4  0x004464eb in -[FBRequestMetadata initWithRequest:completionHandler:batchEntryName:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBRequestConnection.m:94
#5  0x00446cb6 in -[FBRequestConnection addRequest:completionHandler:batchEntryName:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBRequestConnection.m:324
#6  0x00446bdb in -[FBRequestConnection addRequest:completionHandler:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBRequestConnection.m:312
#7  0x0044048a in -[FBRequest startWithCompletionHandler:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBRequest.m:149
#8  0x0045ec70 in +[FBUtility fetchAppSettings:callback:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBUtility.m:263
#9  0x0046e06b in +[FBSettings publishInstall:withHandler:isAutoPublish:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBSettings.m:334
#10 0x0046dc0c in +[FBSettings autoPublishInstallImpl:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBSettings.m:217
#11 0x00e27e83 in __NSFireDelayedPerform ()
#12 0x02a9d376 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#13 0x02a9ce06 in __CFRunLoopDoTimer ()
#14 0x02a84a82 in __CFRunLoopRun ()
#15 0x02a83f44 in CFRunLoopRunSpecific ()
#16 0x02a83e1b in CFRunLoopRunInMode ()
#17 0x0339f7e3 in GSEventRunModal ()
#18 0x0339f668 in GSEventRun ()
#19 0x0120665c in UIApplicationMain ()
#20 0x0000230d in main at /Users/craig/Documents/Projects/MyProject/main.m:14

如果我删除[FBAppCall handleDidBecomeActive],我会得到相同的结果。所以这似乎是一个结果[FBAppEvents activateApp]

如果我删除[FBAppEvents activateApp](我认为无论如何都是可选的)并且只调用[FBAppCall handleDidBecomeActive],我可以启动该应用程序。但是当我尝试FBLoginView在我的视图控制器中创建一个实例时:

FBLoginView * loginview = [[FBLoginView alloc] init];

我得到同样的错误(EXC_BAD_ACCESS (code=2, address=0x0)):

#0  0x0253309f in objc_msgSend ()
#1  0x0251eb2e in objc_setProperty_non_gc ()
#2  0x0251ed0d in objc_setProperty ()
#3  0x0046d47d in -[FBLoginView setSessionStateHandler:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBLoginView.m:52
#4  0x0046b6f8 in -[FBLoginView initializeBlocks] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBLoginView.m:177
#5  0x0046ba1c in -[FBLoginView initialize] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBLoginView.m:212
#6  0x0046b432 in -[FBLoginView initWithFrame:] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBLoginView.m:119
#7  0x0124528f in -[UIView init] ()
#8  0x0046b252 in -[FBLoginView init] at /Users/chrisp/tmp/build-sdk/ios-sdk/src/FBLoginView.m:80
#9  0x0001c0ea in -[MyViewController postToFacebook:] at /Users/craig/Documents/Projects/MyProject/Classes/MyViewController.mm:8040
#10 0x00015c18 in -[MyViewController copy:to:] at /Users/craig/Documents/Projects/MyProjects/Classes/MyViewController.mm:6624
#11 0x000225ee in -[MyViewController menuItemSelected:] at /Users/craig/Documents/Projects/MyProjects/Classes/MyViewController.mm:10003
#12 0x00e27e83 in __NSFireDelayedPerform ()
#13 0x02a9d376 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#14 0x02a9ce06 in __CFRunLoopDoTimer ()
#15 0x02a84a82 in __CFRunLoopRun ()
#16 0x02a83f44 in CFRunLoopRunSpecific ()
#17 0x02a83e1b in CFRunLoopRunInMode ()
#18 0x0339f7e3 in GSEventRunModal ()
#19 0x0339f668 in GSEventRun ()
#20 0x0120665c in UIApplicationMain ()
#21 0x0000230d in main at /Users/craig/Documents/Projects/MyProject/main.m:14

不要被我显然没有创建我FBLoginView的 in的事实所迷惑viewDidLoad。关键是第一次调用试图对我的 Facebook 会话做任何事情的任何东西都会以同样的方式失败。看起来它在这两种情况下都试图用处理程序做一些事情。相同的代码适用于示例代码中的 MY Facebook 标识符、捆绑 ID 等,但不适用于我的应用程序。我怀疑我的应用程序和示例之间的编译器/链接器设置或其他一些配置差异,但我不确定从哪里开始寻找。我看到的所有东西在我的应用程序和示例之间看起来都是一样的。

我尝试了很多不同的方法来打开 Facebook 会话并获得我需要的权限,但它们都以同样的方式失败。这似乎是一个很好的发布在这里,因为示例工作但我的应用程序中的相同代码没有。

谢谢你的帮助。

编辑:我在构建设置中看到示例应用程序使用 ARC。我不。在其生命周期的这一点上,我犹豫是否要转换一个大型的、功能正常的应用程序。

4

0 回答 0