崩溃:com.apple.main.thread EXC_BREAKPOINT 0x0000000100c5009c keyboard_arrow_up

时间:2019-05-20 13:02:37

标签: ios xcode swift4

我是iOS的新开发者,我是从Firebase崩溃分析中得到此错误的。谁能帮我为什么会出现此错误?

Crashed: com.apple.main-thread
0  People Time Tracking           0x100c5009c closure #1 in closure #1 in SelectJobScreen.getPreviousStatus() (SelectJobScreen.swift:798)
1  People Time Tracking           0x100cb2648 thunk for @escaping @callee_guaranteed () -> () (<compiler-generated>)
2  libdispatch.dylib              0x1e6993a38 _dispatch_call_block_and_release + 24
3  libdispatch.dylib              0x1e69947d4 _dispatch_client_callout + 16
4  libdispatch.dylib              0x1e6942004 _dispatch_main_queue_callback_4CF$VARIANT$mp + 1068
5  CoreFoundation                 0x1e6ee4ec0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
6  CoreFoundation                 0x1e6edfdf8 __CFRunLoopRun + 1924
7  CoreFoundation                 0x1e6edf354 CFRunLoopRunSpecific + 436
8  GraphicsServices               0x1e90df79c GSEventRunModal + 104
9  UIKitCore                      0x212cc5b68 UIApplicationMain + 212
10 People Time Tracking           0x100c1afcc main (TodoItem.swift:17)
11 libdyld.dylib                  0x1e69a58e0 start + 4

几天以来,我一直在尝试找出可能导致此崩溃的原因,但一直无法复制。我在这里看不到任何隐式的拆包或可选内容,但是如果重要的话,sessionId是会话对象中的非可选值。

我使用的是Swift 4.1,当运行各种不同版本的iOS 10、11和12的iOS设备上发生崩溃时,该应用程序确实支持某些版本的iOS 9,但尚未报告(尽管可能无关紧要,因为该应用的iOS 9用户群很小)

在错误日志中,它显示此功能getPreviousStatus()

func getPreviousStatus() {
    let connect = JsonManger()
    let app = UIApplication.shared.delegate as! AppDelegate
    let user:User  = app.dataManager.gUser

    if Reachability.isConnectedToNetwork() {
        self.showHUD( msg: "Loading...." )
        connect.getLogDetails(baseUrl: user.ClientWeb, email: user.EmailID, password: user.Password, brugerId: user.BrugerID, success: { (res) in
            var indud = false
            if ( res.object(forKey: "indud") != nil ){
                indud = res.object(forKey: "indud") as! Bool
            }

            if indud {
                var isTodo = false
                if res.object(forKey: "isToDo") != nil {
                    isTodo = res.object(forKey: "isToDo") as! Bool
                }

                if isTodo {
                    var str = res.object(forKey: "JobId") as! String
                    let index = str.index(str.startIndex, offsetBy: 1)
                    str = str.substring(from: index)
                    let prjId = Int(str)!
                    let project = app.dataManager.gProject.getProject(id: prjId)
                    let todoId  = res.object(forKey: "TodoId") as! String
                    let todo = app.dataManager.gTodo.getTodo(id: Int(todoId)!)

                    self.project = project
                    self.todoItem = todo
                    app.dataManager.isCheckedin = true
                    self.des = res.object(forKey: "JobDescription") as? String
                    let  startTime  = res.object(forKey: "Dato2") as! String
                    DispatchQueue.main.async {

                        let ud  = UserDefaults.standard
                        ud.set(true, forKey: "isCheckedIn")
                        ud.set( 1, forKey:"type")
                        ud.set( self.project.ID!, forKey: "projectId" )
                        ud.set( self.todoItem.ID! , forKey: "todoId" )
                        // print(" todo data  is : \(self.todoItem.ID!)")
                        ud.set( self.des, forKey: "des")
                        ud.set( startTime,forKey: "startTime")
                        ud.set( startTime, forKey: "checkInTime" )
                        ud.synchronize()

                        self.hideHUD()
                        self.performSegue(withIdentifier: "goStartTodoFromSelect", sender: nil )
                    }

                } else {
                    var jobId  = res.object(forKey: "JobId") as! String
                    jobId = jobId.replacingOccurrences(of: "P", with: "")
                    self.des = res.object(forKey: "JobDescription") as? String
                    let jobCode  = app.dataManager.gJobCode.getJobCode(id: Int(jobId)! )
                    self.jobCodeItem = jobCode
                    // let chekinTime = res.object(forKey: "Dato2") as! String
                    let  startTime  = "2019-05-15T19:45:00"

                    DispatchQueue.main.async {
                        app.dataManager.isCheckedin = true

                        let ud  = UserDefaults.standard
                        ud.set(true, forKey: "isCheckedIn")
                        ud.set( 0, forKey:"type")
                        ud.set( jobId, forKey: "jobId" )
                        ud.set( startTime,forKey: "startTime")
                        ud.set( startTime, forKey: "checkInTime" )

                        if res.object(forKey: "JobDescription") != nil {
                            self.des = res.object(forKey: "JobDescription") as? String
                            ud.set( self.des, forKey: "des")
                        }
                        ud.synchronize()

                        DispatchQueue.main.async {
                            self.hideHUD()
                            self.performSegue(withIdentifier: "goStartJob", sender: nil )
                        }
                    }
                }

            } else {
                DispatchQueue.main.async {
                    self.hideHUD()
                    //            self.popToRoot()
                    for controller in self.navigationController!.viewControllers as Array {
                        if controller.isKind(of: SelectJobScreen.self) {
                            self.navigationController!.popToViewController(controller, animated: true)
                            break
                        }
                    }
                }
            }
        }) { (error) in
            DispatchQueue.main.async {
                self.hideHUD()
                //            self.popToRoot()
                for controller in self.navigationController!.viewControllers as Array {
                    if controller.isKind(of: SelectJobScreen.self) {
                        self.navigationController!.popToViewController(controller, animated: true)
                        break
                    }
                }
            }
        }
    } else {
        print("Record Not Found")
    }
}

1 个答案:

答案 0 :(得分:1)

在getPreviousStatus()函数获取空值的同时,使用调试对其进行一次检查

''