Приложение вылетает при нажатии кнопки с testflight - PullRequest
0 голосов
/ 03 января 2019

Я занимаюсь разработкой приложения на Swift 4.2, и у меня возникают проблемы с аварийным завершением приложения iOS Для меня все работает нормально, но не работает для тех, кто установил приложение с testflight. Ошибка такая. enter image description here

Вот код, который добавляет обработчик.

cell.btnBooknow.addTarget(self, action: #selector(pressBookNowButton(button:)), for: .touchUpInside)

Вот обработчик нажатия кнопки.

@objc func pressBookNowButton(button: UIButton) {
    guard let tagValue = self.arrListingBagHandler.object(at: button.tag) else {
        return
    }
    print(self.artworks)

    print(self.onlineStatus)
    print(self.arrSearchAddressResult)


    print(tagValue)
    let valueStatus = tagValue["IsOnline"] as! String
    let availability = tagValue["AvailabilityDays"] as! String
    let arr = Array(availableDays)
    print(valueStatus)
    print(arr)
    let arrAvailability = Array(availability)
    print(arrAvailability)
    let arr1 = availability.components(separatedBy: ",")
    print(arr1)

    let day = (presentDay!-1)
    let today = "\(day)"
    print(today)
    if arr1.contains(today)
    {
        availableToday = true
    }
    else
    {
        availableToday = false
    }

    if valueStatus == "1" && availableToday == true
    {
        let obj = self.storyboard?.instantiateViewController(withIdentifier: "bookingId") as! BookingViewController
        obj.dicBagHanlderDetail = tagValue
        self.navigationController?.pushViewController(obj, animated: true)
    }
    else 
    {
        let alert = UIAlertController(title: "Alert!", message: "You can't make booking because store is currently closed.", preferredStyle: .alert)
        let okAction = UIAlertAction(title: "OK", style: .cancel) { (actoin) in
        }
        alert.addAction(okAction)
        self.present(alert, animated: true, completion: nil)
    }

}

Может кто-нибудь помочь мне? Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Пожалуйста, используйте функцию ниже и решите проблему.Я думаю, что это возможно из-за силы приведения строки и значения int.

@objc func pressBookNowButton(button: UIButton) {
guard let tagValue = self.arrListingBagHandler.object(at: button.tag) else {
    return
}




let valueStatus = tagValue["IsOnline"] as? String ?? ""
let availability = tagValue["AvailabilityDays"] as? String ?? ""
let arr = Array(availableDays)

let arrAvailability = Array(availability)

let arr1 = availability.components(separatedBy: ",")

let value : Int = Int(presentDay) ?? 0
let day = (value-1)
let today = "\(day)"

if arr1.contains(today)
{
    availableToday = true
}
else
{
    availableToday = false
}

if valueStatus == "1" && availableToday == true
{
    let obj = self.storyboard?.instantiateViewController(withIdentifier: "bookingId") as! BookingViewController
    obj.dicBagHanlderDetail = tagValue
    self.navigationController?.pushViewController(obj, animated: true)
}
else
{
    let alert = UIAlertController(title: "Alert!", message: "You can't make booking because store is currently closed.", preferredStyle: .alert)
    let okAction = UIAlertAction(title: "OK", style: .cancel) { (actoin) in
    }
    alert.addAction(okAction)
    self.present(alert, animated: true, completion: nil)
}

}
0 голосов
/ 03 января 2019

Как и предполагали другие, любой ! является потенциальной аварией.Попробуйте заменить его на значения защиты или значения по умолчанию.Например, вы можете изменить:

let valueStatus = tagValue["IsOnline"] as! String
let availability = tagValue["AvailabilityDays"] as! String

На решение со значениями по умолчанию:

let valueStatus = tagValue["IsOnline"] as? String ?? "1"
let availability = tagValue["AvailabilityDays"] as? String ?? "5"

Или даже лучше защитить и, например, вывести предупреждение, если данные недоступны:

guard let valueStatus = tagValue["IsOnline"] as? String,
    let availability = tagValue["AvailabilityDays"] as? String else {
    // Display alert in case of unavailable data (or simply return)
    let alert = UIAlertController(title: "Alert!", message: "You can't make booking because store is currently closed.", preferredStyle: .alert)
    let okAction = UIAlertAction(title: "OK", style: .cancel) { _ in }
    alert.addAction(okAction)
    self.present(alert, animated: true, completion: nil)
    return
}
// Continue as expected here...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...