警告错误并动态显示隐藏的 UILabel

Posted

技术标签:

【中文标题】警告错误并动态显示隐藏的 UILabel【英文标题】:Alert Error and Dynamically show hidden UILabel 【发布时间】:2015-03-01 13:02:23 【问题描述】:

我有两个不同的问题,

    我有一个隐藏在 viewDidLoad() 中的标签,后来我尝试将隐藏值设置为 false,但它不起作用。 尝试显示警报但收到此错误“由于未捕获的异常 '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()
    

【问题讨论】:

【参考方案1】:

好的,最后我使用 dispatch_async(dispatch_get_main_queue()) 解决了这个问题,所以 if 语句将是这样的

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)
 
                

              

【讨论】:

我自己也遇到了同样的问题!从任务调用 GUI 代码需要 dispatch_async(dispatch_get_main_queue()),非常感谢!

以上是关于警告错误并动态显示隐藏的 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

获取动态UILabel的高度

js设置DIV显示时间并动态显示时间倒计时多少秒,倒计时完了之后该层自动隐藏。

为每个具有类名的 div 动态创建按钮,并创建显示/隐藏单击功能

如何在离子框架中动态隐藏/显示导航栏?

Phonegap:动态显示和隐藏状态栏(iOS Xcode)

如何显示和隐藏在 vue js 中动态创建的 div(多格式选项卡结构)