我正在尝试将FB集成到现有的iOS应用中。
我已修改HelloFacebookSample应用以使用我的应用ID,显示名称和包标识符。我可以运行它并从它发布就好(在iOS 6模拟器中运行)。所以这让我相信我在developers.facebook.com上的设置是正确的。
接下来,我查看了app delegate中的代码并查看了示例中的控制器,并将其复制到我自己的代码中。执行的第一部Facebook代码位于applicationDidBecomeActive:
的app委托中。我执行与示例应用程序相同的两行:
[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
中创建viewDidLoad
这一事实所迷惑。关键在于,尝试对我的Facebook会话做任何事情的任何事情的第一次调用都以同样的方式失败。看起来它正试图在两种情况下都使用处理程序。相同的代码与示例代码中的MY Facebook标识符,包ID等一起使用,但在我的应用程序中不起作用。我怀疑编译器/链接器设置或我的应用程序和示例之间的一些其他配置差异,但我不知道从哪里开始查看。我看过的所有内容在我的应用和示例之间看起来都是一样的。
我尝试了很多不同的方法来打开Facebook会话并获得我需要的权限,但它们都以同样的方式失败。这可能是一个很好的发布在这里,因为示例工作,但我的应用程序中相同的代码没有。
感谢您的帮助。
编辑:我在构建设置中看到示例应用程序使用ARC。我不。在生命周期的这个阶段,我对于转换一个功能强大的大型应用程序犹豫不决。