2016-08-21 69 views
8

最近我开始加入我的应用程序IOS 10功能,同时我遇到了一个奇怪的错误:EXC_BAD_ACCESS了Facebook SDK登录Xcode中8的测试版

当通过浏览器的Facebook SDK尽快验证,我点击了Facebook本身的确认按钮嵌入式浏览器,应用程序崩溃。

enter image description here 不幸的是,这个bug并没有提供信息,控制台并没有告诉我任何有关它的信息,也没有调用堆栈来查看发生此异常的位置。

两个点展示这种错误的原因:如果登录通过系统帐户,但 1.不会出现此错误,只有当它在浏览器中,你可以在接下来的照片上看到: enter image description here

(只要我点击确定发生异常)

  1. 当我通过Xcode 7.x运行我的应用程序时,错误不会发生。所以这可能与facebook SDK与新编译器的集成或类似的东西有关。

希望有人有这样的答案,或者我可以怎样调试这种无信息错误的想法。 在此先感谢, Liran。

+0

丽然你好,请考虑评价答案我在下面留下接受的答案。它更直接地帮助人们解决这个问题。在这里也可以看到:https://www.facebook.com/groups/fbdevelopers/permalink/1165603546816491/ – adimitri

回答

0

我刚碰到类似的东西,但不幸的是我没有时间去挖掘问题。但我发现这个网站,这也解释了相当不错它是如何工作的,以及如何对其进行调试:What Is EXC_BAD_ACCESS and How to Debug It

所以,在这里就是为什么这个错误发生:

总之,当你遇到EXC_BAD_ACCESS,这意味着您尝试将消息发送到无法执行该消息的内存块。

但是,在某些情况下,EXC_BAD_ACCESS是由损坏的指针引起的。只要你的应用程序试图解引用损坏的指针,内核就会抛出一个异常。

一个在这篇文章中给出的解决方案是使用僵尸对象

点击左上方的主动方案,并选择编辑计划。

选择左侧的Run(运行)并打开顶部的Diagnostics(诊断)选项卡。要启用僵尸对象,请勾选标记为启用僵尸对象的复选框。 如果您现在遇到EXC_BAD_ACCESS,Xcode控制台中的输出会让您更好地了解从何处开始搜索。

它应该给你更多的日志信息,所以你可以有一个什么样的问题根源的想法。顺便说一句,它不适合我。

另一种解决方案是使用分析 Xcode工具检查代码中可能存在问题的区域。 按Shift-Cmd-B即可使用它,或Product -> Analyze 它应显示您必须在Xcode左侧面板的Issue Navigator中检查的可能问题。点击问题显示Xcode中可疑的代码块,但这可能最终不会成为问题的一部分。

欲了解更多信息,请查看上面的链接,我只是总结了文章的内容。

+0

感谢兄弟我也发现,但我发现问题只在Beta 6中,所以它必须是一个问题编译FB SDK,所以它不会帮助调试它。我会等待下一个Xcode版本,我认为这是一个更好的解决方案:) –

+1

不客气,我认为你是对的,这也是我决定也要做的,等待并希望稳定版本将解决这个问题。但我想你的意思是beta 8,不是吗? 祝你好运!) – n3wbie

4

我也遇到过这个问题。看来的的UIApplication委托方法之一是不赞成使用的iOS 9和iOS的10

optional func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool 

我用下面的方法取代它大概删除:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
     return FBSDKApplicationDelegate.sharedInstance().application(app, 
                    open: url, 
                    sourceApplication: options[.sourceApplication] as! String, 
                    annotation: options[.annotation]) 
} 
+0

非常感谢!有趣的是,如果'AppDelegate'实现了旧的'open url'方法,那么应用程序会直接崩溃。删除它并执行新的解决了我的问题。 –

+1

谢谢。这应该是被接受的答案。 – yesthisisjoe