2017-01-12 4 views
0

Я делаю StockApplication с помощью Swift, и я пытаюсь сделать Alert в портфолио, и у меня возникают некоторые ошибки. Я искал новейшую версию Alertview, но ничего не сработало, поэтому я просто искал какую-то помощь.Ошибка UIAlertView

static func showAlert(title: String, message: String, caller: UITableViewController) { 
    if #available(iOS 8.0, *) { 
     let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
    } else { 
     // Fallback on earlier versions 
    } 

    if #available(iOS 8.0, *) { 
     let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { 
      UIAlertAction in 
     } 
    } else { 
     // Fallback on earlier versions 
    } 

    if #available(iOS 8.0, *) { 
     alertcontroller.addAction(okAction) 
    } else { 
     // Fallback on earlier versions 
    } 


    caller.presentViewController(alertController, animated: true, completion: nil) 
} 
} 

Моя ошибка. Я получаю использование предупреждающего контроллера неразрешенного идентификатора.

+0

Что ошибка вы получаете? – Pierce

+0

@Pierce Я обновил свой вопрос. – LucMollard

+0

Нужно ли вам поддерживать iOS 7? Если нет, нет необходимости в проверке версий. – rmaddy

ответ

-1

Похоже, вы создаете alertController внутри фрагмента кода, где указывается, что он будет выполнен только в том случае, если доступен iOS 8.0. Попробуйте что-нибудь подобное вместо этого:

var alertController:UIAlertController? 

if #available(iOS 8.0, *) { 
    alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
} else { 
    // Fallback on earlier versions 
    // Do whatever else with the alertController 
} 

Проблема основана на том, что ошибка, которую вы сказали, что вы видите, что вы пытаетесь представить UIAlertController в конце вашего метода под названием alertController, но это говорит вам там ISN 't какое-либо свойство с именем alertController, в котором говорится, что строка кода, в которой вы его создавали, не вызывается, а это означает, что если условие не было выполнено.

Я хотел бы сделать это, он обновляется и намного проще:

func showAlert(title: String, message: String, caller: UITableViewController) { 

    let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) 
    let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default) 
    alertController.addAction(okAction) 

    caller.present(alertController, animated: true, completion: nil) 
} 
+0

Что следует заменить этим кодом. – LucMollard

+0

Я напишу код, который будет работать лучше, но позвольте мне спросить вас, почему вы проверяете версию iOS? Вы используете устройство с чем-то ниже 8,0? – Pierce

+0

Нет Я просто использовал этот код из старого проекта, и мне нужно его обновить. @Pierce – LucMollard

0

Ваш код все дробить и ваша декларация alertController в области видимости только первый if заявление.

Наилучший подход был бы сгруппировать весь код вместе правильно:

Swift 2:

static func showAlert(title: String, message: String, caller: UITableViewController) { 
    if #available(iOS 8.0, *) { 
     let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
     let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { action in 
     // do something 
     } 
     alertcontroller.addAction(okAction) 
     caller.presentViewController(alertController, animated: true, completion: nil) 
    } else { 
     // Fallback to UIAlertView on earlier versions 
    } 
} 

Конечно, если у вас нет необходимости поддерживать IOS 7, то ничего из этого не требуется. Вобще:

static func showAlert(title: String, message: String, caller: UITableViewController) { 
    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
    let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default) { action in 
     // do something 
    } 
    alertcontroller.addAction(okAction) 
    caller.presentViewController(alertController, animated: true, completion: nil) 

} 

Swift 3:

static func showAlert(title: String, message: String, caller: UITableViewController) { 
    if #available(iOS 8.0, *) { 
     let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) 
     let okAction = UIAlertAction(title: "OK", style: .default) { action in 
      // do something 
     } 
     alertController.addAction(okAction) 
     caller.present(alertController, animated: true, completion: nil) 
    } else { 
     // Fallback to UIAlertView on earlier versions 
    } 
} 
+0

Это все еще не обновлено для Swift 3. Синтаксис Swift 3 сказал бы: 'UIAlertActionStyle.default' и' caller.present (alertController, animated: true, completion: noil) ' – Pierce

+0

@Pierce OP опубликовал код Swift 2. Ответ Swift 2. В вопросе не упоминается использование Swift 3. – rmaddy

+0

Прошу прощения, если вы считаете, что я критикую. Я просто упоминал, если кто-то наткнулся на это и должен был использовать Swift 3 – Pierce