【问题标题】:SIGABRT ABORT crash on iOS swiftiOS swift上的SIGABRT ABORT崩溃
【发布时间】:2015-11-23 01:53:46
【问题描述】:

我在注释下方提到的行中遇到 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)
                    }

                }
            }

        })
    }
}

这是我收到的崩溃报告。

线程:崩溃: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 中止 + 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) -> () -> ()).(关闭 #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 核心基础 0x00000001832b0d48 __53-[__NSArrayM enumerateObjectsWithOptions:usingBlock:]_block_invoke + 132 13 核心基础 0x00000001832b0c2c -[__NSArrayM enumerateObjectsWithOptions:usingBlock:] + 312 14 MY_APP 0x00000001003dd500 -[FBSDKGraphRequestConnection completeWithResults:networkError:] (FBSDKGraphRequestConnection.m:679) 15 MY_APP 0x00000001003dc950 -[FBSDKGraphRequestConnection 完成FBSDKURLConnectionWithResponse:data:networkError:] (FBSDKGraphRequestConnection.m:544) 16 MY_APP 0x00000001003da910 __36-[FBSDKGraphRequestConnection 开始]_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 核心基础 0x000000018329c97c CFArrayApplyFunction + 68 27 CFNetwork 0x0000000182cf7da8 RunloopBlockContext::perform() + 136 28 CFNetwork 0x0000000182cf7c5c MultiplexerSource::perform() + 312 29 CFNetwork 0x0000000182cf7a88 MultiplexerSource::_perform(void*) + 68 30 核心基础 0x0000000183373f8c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24 31 核心基础 0x0000000183373230 __CFRunLoopDoSources0 + 264 32 核心基础 0x00000001833712e0 __CFRunLoopRun + 712 33 核心基础 0x000000018329cf74 CFRunLoopRunSpecific + 396 34 图形服务 0x000000018cba76fc GSEventRunModal + 168 35 UIKit 0x0000000187e9ed94 UIApplicationMain + 1488 36 MY_APP 0x00000001000f6c58 主(AppDelegate.swift:16) 37 libdyld.dylib 0x00000001953c2a08 开始 + 4

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

{ 数据 = ( { 分数 = 41; 用户 = { ID = 10206371034343540; name = "罗希特戈亚尔"; }; } ); }

【问题讨论】:

  • 您将 fbResult.objectForKey("data") 向下转换为 NSMutableArray。如果已知字典键仅包含 NSMutableArray 实例,则可以使用强制类型转换运算符(as!)的强制版本向下转换并直接解包为非可选 NSMutableArray:您可以在控制台中打印 fbResult 并共享吗?
  • data 键是一个数组?在这里打印结果控制台,或者如果它长期使用pastie。
  • @Prabhu.Somasundaram 在这里。 { data = ( { score = 41; user = { id = 10206371034343540; name = "Rohit Goyal"; }; } ); }
  • @Prabhu.Somasundaram 当我在图形 api 工具浏览器上尝试同样的事情时,它给了我一个数组。在 iOS 上,我得到的是括号而不是括号。这有什么区别吗。请注意,它在我的设备上运行良好。有什么想法吗?
  • @iAshish 请阅读我上面的评论并分享您的观点。

标签: ios swift facebook-ios-sdk


【解决方案1】:

由于这一行有异常:

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

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

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

【讨论】:

    【解决方案2】:

    尝试像这样替换它:

    当前

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 2018-01-09
      • 2018-05-08
      • 1970-01-01
      相关资源
      最近更新 更多