0

我有两个不同的问题,

  1. 我有一个隐藏在 viewDidLoad() 中的标签,后来我试图将隐藏值设置为 false 但它不起作用。
  2. 尝试显示警报但收到此错误“由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'应用程序试图以模态方式呈现活动控制器”

这是我下面的代码

class HomeViewController: UIViewController ,UITextFieldDelegate {

    @IBOutlet weak var userName: UITextField!
    @IBOutlet weak var passWord: UITextField!
    @IBOutlet weak var errorMessage: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.errorMessage.hidden = true
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func login(sender: AnyObject) {

        let alertController = UIAlertController(title: "Error", message:
            "Wrong username or password", preferredStyle: UIAlertControllerStyle.Alert)
        alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.Default,handler: nil))

        let url = NSURL(string: "myurl")
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
            println(NSString(data: data, encoding: NSUTF8StringEncoding))
            var error: NSError?
            let jsonData: NSData = data /* get your json data */
            let json = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary

            if let login: AnyObject = json["login"]  {
                if (login as NSObject == 0){

                    self.errorMessage.hidden = false
                    self.presentViewController(alertController, animated: true, completion: nil)

                }

            }  
          }

        task.resume()
    }
4

1 回答 1

1

Ok , finally i solved this problem using dispatch_async(dispatch_get_main_queue()) { } so the if statement will be like this

if let login: AnyObject = json["login"]  {
                if (login as NSObject == 0){
                    dispatch_async(dispatch_get_main_queue()) { 
                    self.errorMessage.hidden = false
                    self.presentViewController(alertController, animated: true, completion: nil)
 }
                }

            }  
于 2015-03-01T16:37:36.060 回答