2016-08-12 3 views
-1

Когда я тестирую плохие данные в текстовом поле и пытаюсь показать предупреждение о недостающих или плохих данных, предупреждение не отображается. Но я могу получить предупреждение, чтобы отобразить в функции viewDidLoadalert iOS swift

Вот код

import UIKit 
import CoreData 

class SellViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 
@IBOutlet weak var customer: UITextField! 
@IBOutlet weak var bales: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let alert = UIAlertController(title: "Hey", message: "@ SellViewController viewDidLoad ", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Working!!", style: UIAlertActionStyle.Default, handler: nil)) 
    self.presentViewController(alert, animated: true, completion: nil) 

func checkDataInput(){ 

    print("checking data input customer.text \(customer.text)") 
    print("checking data input bales.text \(bales.text)") 

    if (customer.text!.isEmpty) { 
     customer.text = "REQUIRED" 
     missingCustomer() 
    } 
if (bales.text!.isEmpty){ 
     availableAlert() 
    }else{ 
     newQuantity = Int(bales.text!)! 
    } 

func availableAlert() { 
    print(" at availableAlert") 

    let alert = UIAlertController(title: "Hey", message: "@ SellViewController func missingValues ", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Working!!", style: UIAlertActionStyle.Default, handler: nil)) 
    self.presentViewController(alert, animated: true, completion: nil) 


func missingCustomer() { 
    print(" at missingCustomer") 
    let alert = UIAlertController(title: "Hey", message: "@ SellViewController func missingCustomer ", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Working!!", style: UIAlertActionStyle.Default, handler: nil)) 
    self.presentViewController(alert, animated: true, completion: nil) 
    } 

Это отображает предупреждение в viewDidLoad но ни один сигнал, когда я недостающие данные. Операторы печати, когда у меня отсутствуют данные, возвращаются как.

проверки входных данных customer.text Дополнительно ("")
проверки ввода данных bales.text Дополнительно ("")
на missingCustomer
на availableAlert
Фатальная ошибка: неожиданно обнаружили ноль в то время разворачивания необязательное значение

Неустранимая ошибка возникает из-за того, что пользователь не может исправить свой ответ, когда получает предупреждение.

Что я делаю неправильно? Не следует ли сразу же отображать предупреждение, когда запущены мои функции missingData, и уметь исправлять их записи?

+1

Почему вы не опубликовали соответствующий код, который не работает, так как это проблема? – rmaddy

+0

Выполняется ли функция 'missingData' в основном потоке? Если нет, используйте 'DispatchQueue.main.async {/ * отображение вашего предупреждения здесь * /}' (или 'dispatch_async (dispatch_get_main_queue()) {/ * отображаем ваше предупреждение здесь * /}' в Swift 2.0) – Palle

ответ

0

Это звучит как проблема с резьбой. Ваш код оценки данных, скорее всего, выполняется в основном потоке (вы его не размещали, поэтому не можете сказать наверняка), поэтому, когда вы пытаетесь выполнить работу с пользовательским интерфейсом, в этом случае выдается предупреждение, оно не будет выполняться. Чтобы исправить это, попробуйте использовать этот код в функции missingData:

let alert = UIAlertController(title: "Hey", message: "@ SellViewController viewDidLoad ", preferredStyle: UIAlertControllerStyle.Alert) 
alert.addAction(UIAlertAction(title: "Working!!", style: UIAlertActionStyle.Default, handler: nil)) 
dispatch_async(dispatch_get_main_queue()) { 
    self.presentViewController(alert, animated: true, completion: nil) 
} 
+0

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