ios - iOS swift 上的 SIGABRT ABORT 崩溃

标签 ios swift facebook-ios-sdk

我在评论下方提到的行中遇到 SIGABRT ABORT 崩溃(let data = fbResult.objectForKey("data") as!NSMutableArray)。我只是想通过 Facebook 保存用户的分数。请注意,我无法重现此问题,而且这种情况只发生在极少数设备上。我刚刚通过崩溃报告发现了这个问题。

var fbScore = 0
func getFBScore(){
    if(FBSDKAccessToken.currentAccessToken() != nil){
        var request = FBSDKGraphRequest(graphPath: "me/scores?fields=score", parameters: nil)
        request.startWithCompletionHandler({(connection, result, error) -> Void in
            if(error != nil){
                println("facebook score reading failed with error \(error)")

            } else {
                println("facebook score reading result \(result)")
                let fbResult = result as! NSDictionary
                //crash on below line
                let data = fbResult.objectForKey("data") as! NSMutableArray
                if(data.count == 0){
                    self.postFBScore(0)
                } else {
                    if let mScore = data[0].objectForKey("score") as? Int{
                        self.fbScore = mScore
                        println("facebook score is \(self.fbScore)")
                    } else{
                        self.postFBScore(0)
                    }

                }
            }

        })
    }
}

这是我得到的崩溃报告。


    Thread : Crashed: com.apple.main-thread
    0  libsystem_kernel.dylib         0x00000001954db270 __pthread_kill + 8
    1  libsystem_pthread.dylib        0x0000000195579160 pthread_kill + 112
    2  libsystem_c.dylib              0x0000000195452aa0 abort + 112
    3  libswiftCore.dylib             0x0000000100a6dd80 swift::fatalError(char const*, ...) + 182
    4  libswiftCore.dylib             0x0000000100a4aefc swift::swift_dynamicCastFailure(void const*, char const*, void const*, char const*, char const*) + 70
    5  libswiftCore.dylib             0x0000000100a4af80 swift::swift_dynamicCastFailure(swift::Metadata const*, swift::Metadata const*, char const*) + 130
    6  libswiftCore.dylib             0x0000000100a6f6dc swift_dynamicCastObjCClassUnconditional + 72
    7  MY_APP                     0x00000001000e5c70 MY_APP.GameScene.(getFBScore (MY_APP.GameScene) -> () -> ()).(closure #1) (GameScene.swift:1600)
    8  MY_APP                     0x00000001003d6ea4 -[FBSDKGraphRequestMetadata invokeCompletionHandlerForConnection:withResults:error:] (FBSDKGraphRequestMetadata.m:48)
    9  MY_APP                     0x00000001003ddef0 __82-[FBSDKGraphRequestConnection processResultBody:error:metadata:canNotifyDelegate:]_block_invoke394 (FBSDKGraphRequestConnection.m:719)
    10 MY_APP                     0x00000001003ddca0 -[FBSDKGraphRequestConnection processResultBody:error:metadata:canNotifyDelegate:] (FBSDKGraphRequestConnection.m:768)
    11 MY_APP                     0x00000001003dd768 __64-[FBSDKGraphRequestConnection completeWithResults:networkError:]_block_invoke (FBSDKGraphRequestConnection.m:697)
    12 CoreFoundation                 0x00000001832b0d48 __53-[__NSArrayM enumerateObjectsWithOptions:usingBlock:]_block_invoke + 132
    13 CoreFoundation                 0x00000001832b0c2c -[__NSArrayM enumerateObjectsWithOptions:usingBlock:] + 312
    14 MY_APP                     0x00000001003dd500 -[FBSDKGraphRequestConnection completeWithResults:networkError:] (FBSDKGraphRequestConnection.m:679)
    15 MY_APP                     0x00000001003dc950 -[FBSDKGraphRequestConnection completeFBSDKURLConnectionWithResponse:data:networkError:] (FBSDKGraphRequestConnection.m:544)
    16 MY_APP                     0x00000001003da910 __36-[FBSDKGraphRequestConnection start]_block_invoke_2 (FBSDKGraphRequestConnection.m:188)
    17 MY_APP                     0x00000001003d76ec -[FBSDKURLConnection invokeHandler:error:response:responseData:] (FBSDKURLConnection.m:104)
    18 MY_APP                     0x00000001003d7644 -[FBSDKURLConnection logAndInvokeHandler:response:responseData:] (FBSDKURLConnection.m:96)
    19 MY_APP                     0x00000001003d7a28 -[FBSDKURLConnection connectionDidFinishLoading:] (FBSDKURLConnection.m:143)
    20 CFNetwork                      0x0000000182e391e8 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke + 80
    21 CFNetwork                      0x0000000182e39178 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 208
    22 CFNetwork                      0x0000000182e392f4 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 60
    23 CFNetwork                      0x0000000182d0bdfc ___ZN27URLConnectionClient_Classic26_delegate_didFinishLoadingEU13block_pointerFvvE_block_invoke + 104
    24 CFNetwork                      0x0000000182dd6120 ___ZN27URLConnectionClient_Classic18_withDelegateAsyncEPKcU13block_pointerFvP16_CFURLConnectionPK33CFURLConnectionClientCurrent_VMaxE_block_invoke_2 + 104
    25 CFNetwork                      0x0000000182cf7efc RunloopBlockContext::_invoke_block(void const*, void*) + 76
    26 CoreFoundation                 0x000000018329c97c CFArrayApplyFunction + 68
    27 CFNetwork                      0x0000000182cf7da8 RunloopBlockContext::perform() + 136
    28 CFNetwork                      0x0000000182cf7c5c MultiplexerSource::perform() + 312
    29 CFNetwork                      0x0000000182cf7a88 MultiplexerSource::_perform(void*) + 68
    30 CoreFoundation                 0x0000000183373f8c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
    31 CoreFoundation                 0x0000000183373230 __CFRunLoopDoSources0 + 264
    32 CoreFoundation                 0x00000001833712e0 __CFRunLoopRun + 712
    33 CoreFoundation                 0x000000018329cf74 CFRunLoopRunSpecific + 396
    34 GraphicsServices               0x000000018cba76fc GSEventRunModal + 168
    35 UIKit                          0x0000000187e9ed94 UIApplicationMain + 1488
    36 MY_APP                     0x00000001000f6c58 main (AppDelegate.swift:16)
    37 libdyld.dylib                  0x00000001953c2a08 start + 4 

当我尝试在我的控制台上打印 fbResult 时,这就是我得到的结果。

{ data = ( { score = 41; user = { id = 10206371034343540; name = "Rohit Goyal"; }; } ); }

最佳答案

由于这一行有异常:

let data = fbResult.objectForKey("data") as! NSMutableArray

鉴于 Swift 是一种强静态类型语言,唯一可能的错误原因是使用 ! 运算符将对象转换为类型 NSMutableArray。因此,如果您知道绑定(bind)到键 data 的值是一个数组,您应该尝试将它转换为一个非可变数组:

let data = fbResult.objectForKey("data") as! NSArray

关于ios - iOS swift 上的 SIGABRT ABORT 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32270435/

相关文章:

ios - 无法在 facebook-ios-sdk 中获取 user_birthday 和 user_hometown 的权限

c# - Visual Studio 中的 Xamarin iOS——调试语句被记录两次

ios - 限制 UITextField 的字符时,“完成”按钮不起作用

ios - "Perform all 32 bit float operations as 64 bit float"MORE 还是 LESS 与 .net 兼容?

ios - 从 float 中获取字符串而不对其值进行四舍五入

ios - Facebook App 邀请通知在 ios 中不起作用

ios - Swift 2 中的 MPNowPlayingInfoCenter nowPlayingInfo 错误

json - 将 json 解析为 swift 常量

ios - UIStepper 无法在模拟器中运行

IOS无法将FBProfilePictureView设置为图片 View 类