意外发现每台设备都发生了nil

时间:2018-04-13 12:48:08

标签: swift firebase firebase-realtime-database null

目前我已经在Xcode 9.2和Swift 4中构建了一个IOS应用程序。当我在我的模拟器中运行它时,它可以完美地工作,没有错误,崩溃或任何东西。我在模拟器中尝试过iPhone 6,6 Plus,7,7 Plus,8和8 Plus,没有任何问题。

当我在iPhone设备上构建它时,我收到了在展开时意外发现的错误。请不要分享链接以查看关于选项的Swift文档,我已经了解它们并且已经检查了几周我的代码,除了让开发人员查看它,他也无法弄明白。我们可以假设它是正确编写的,因为它在模拟器上按预期工作,执行所有功能并且没有问题。

我需要知道的是我做错了什么,我做错了什么,可能导致这种头痛的原因是什么?我在我的应用上运行了最新版本的Firebase。

我已经尝试过3台iPhone 7运行11.3,1台运行11.3的iPhone 7和1台运行11.3的iPhone 7 Plus,它们都在testflight中崩溃,直接从Xcode构建。此外,我已从手机中删除了应用程序,清理了派生数据,清理了构建,删除并重建了窗格,升级了帖子,使用pod安装重建了工作区。似乎没有什么能够纠正这个可怕的问题。

以下是崩溃的代码示例。但是,有一些代码在我发表评论时会崩溃,因为它没有任何可选项或者根本没有任何选项,并且具有相同的NIL错误。

    DataService.instance.driverIsOnTrip(driverKey: self.currentUserId!, 
handler: { (isOnTrip, driverKey, tripKey) in
        if isOnTrip == true {
            DataService.instance.REF_TRIPS.observeSingleEvent(of: .value, 
with: { (tripSnapshot) in
                if let tripSnapshot = tripSnapshot.children.allObjects as? 
[DataSnapshot] {
                    for trip in tripSnapshot {
                        if trip.childSnapshot(forPath: "driverKey").value 
as? String == self.currentUserId! {
                            let pickupCoordinateArray = 
trip.childSnapshot(forPath: "pickupCoordinate").value as! NSArray
                            let pickupCoordinate = 
CLLocationCoordinate2D(latitude: pickupCoordinateArray[0] as! 
CLLocationDegrees, longitude: pickupCoordinateArray[1] as! 
CLLocationDegrees)
                            let pickupPlacemark = MKPlacemark(coordinate: 
pickupCoordinate)

                            self.dropPinFor(placemark: pickupPlacemark)

self.searchMapKitForResultsWithPolyline(forOriginMapItem: nil, 
withDestinationMapItem: MKMapItem (placemark: pickupPlacemark))
                        }
                    }
                }
             })
          }
      })
    connectUserAndDriverForTrip()
}

这是我在崩溃的地方遇到问题的代码。正如您所看到的那样,处理程序是选项,但这里没有强制执行任何操作。

func driverIsOnTrip(driverKey: String, handler: @escaping (_ status: Bool?, _ driverKey: String?, _ tripKey: String?) -> Void) {
    DataService.instance.REF_DRIVERS.child(driverKey).child("driverIsOnTrip").observe(.value, with: { (driverTripStatusSnapshot) in
        if let driverTripStatusSnapshot = driverTripStatusSnapshot.value as? Bool {
            if driverTripStatusSnapshot == true {
                DataService.instance.REF_TRIPS.observeSingleEvent(of: .value, with: { (tripSnapshot) in
                    if let tripSnapshot = tripSnapshot.children.allObjects as? [DataSnapshot] {
                        for trip in tripSnapshot {
                            if trip.childSnapshot(forPath: "driverKey").value as? String == driverKey {
                                handler(true, driverKey, trip.key)
                            } else {
                                return
                            }
                        }
                    }
                })
            } else {
                handler(false, nil, nil)
            }
        }
    })
}

0 个答案:

没有答案