目前我已经在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)
}
}
})
}