繁体   English   中英

在iPad3上运行应用程序时,在模拟器上没有变量,但变量没有显示。 斯威夫特4

[英]I get nil on a variable when running app on iPad3 but not on simulator. Swift 4

在我的第一个应用程序中,我有一个函数以[String:String]字典形式发布到Firebase,在Firebase中,我看到发布的所有值都是String 在我的第二个应用程序中,我有一个读取该节点并也以[String:String]检索的函数,但是在快照中打印了两个值, Booking DateBooking Id看起来像Int 我不是真正让他们Int就像我需要他们,当我在模拟器上运行我的第二个应用程序iOS 12.1 it't都好,按预期工作,但是当我在我的iPad 3运行iOS 9.3.5的应用程序崩溃,因为let bookingId = Int(value["Booking Id"]!)为nil,但是如果let bookingDate = Int(value["Booking Date"]!)则不会发生这种情况。 似乎iPad不喜欢转换多个值。 您看到对此有任何解决方案吗? 这是函数:

func getMyBookings() {

    let ref = Database.database().reference()
    ref.child("Continent").child("Europe").child("Country").child("Italy").child("Region").child("Emilia-Romagna").child("City").child("Bologna").child("Shops").child("Workshop Bookings").queryOrdered(byChild: "Shop Name").queryEqual(toValue: "Spezial Cycle").observe(.value)  { (snapshot) in

        //        ref.child("Continent").child("Europe").child("Country").child("Italy").child("Region").child("Emilia-Romagna").child("City").child("Bologna").child("Shops").child("Workshop Bookings").queryOrdered(byChild: "Shop Name").queryEqual(toValue: "Spezial Cycle").observe(.childAdded, with: { (snapshot) in

        print(snapshot)
        if let data = snapshot.value as? [String: [String:String]] {

            for (_, value) in
                data{
                    let bookingDate = Int(value["Booking Date"]!)!
                    //                        let bookingDate = value["Booking Date"]!
                    print("bookingDate is: \(String(describing: bookingDate))")
                    let bookingStart = value["Booking Start"]
                    let bookingEnd = value["Booking End"]
                    let customerName = value["User Name"]
                    let bookingId = Int(value["Booking Id"]!)!
                    print("bookingId is :\(String(describing: bookingId))")
                    let booking: (bookingDate: Int, bookingStart: String, bookingEnd: String, customerName: String, bookingId: Int) = (bookingDate!, bookingStart!, bookingEnd!, customerName!, bookingId: bookingId)
                    print("booking is: \(booking)")
                    self.bookingsArray.append(booking)
                    self.calculateBookedTimeSlots()
            }
            self.calculateBookedTimeSlots()
            if #available(iOS 10.0, *) {
                let actions: [UNNotificationAction] = [UNNotificationAction(identifier: "chiudi", title: "Chiudi", options: [.foreground])]
                Notifications.newTimeIntervalNotification(notificationType: "New booking", actions: actions, categoyIdentifier: "New Booking", title: "Nuova prenotazione", body: "Hai una nuova prenotazione", userInfo: [:], timeInterval: 5, repeats: false)
            } else if #available(iOS 9.0, *){
                // Fallback on earlier versions

                Notifications.newTimeIntervalNotification(notificationType: "New booking", actions: [], categoyIdentifier: "New Booking", title: "Nuova prenotazione", body: "Hai una nuova prenotazione", userInfo: [:], timeInterval: 5, repeats: false)
            }
        }
        //        })
    }
}

这是快照打印,显示Booking DateBooking IdInt一样:

Snap (Workshop Bookings) {
    "-Lb4XzGtLtnBAgoPB6Ay" =     {
        "Booking Date" = 20190329;
        "Booking End" = "14:00";
        "Booking Id" = 201903291300;
        "Booking Start" = "13:00";
        "Shop Logo Url" = "https://firebasestorage.googleapis.com/v0/b/fix-it-b4b00.appspot.com/o/Spezial%20Cycle%2FSpezial%20Cycle%20logo.png?alt=media&token=016cc976-ae8d-4c71-a77f-a899d661be20";
        "Shop Name" = "Spezial Cycle";
        "User Name" = "";
        "Works List" = "Revisione Generale, ";
    };
} 

我认为问题在于您的iPad 3仍在32位数据总线上运行,并且值201903291300太大而无法放入该Int32 (这是32位体系结构上的Int实现)。

您应该尝试使用Int64而不是Int

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM