2015-05-19 123 views
0

我有2个类。 在第一课我有一个标签和一个按钮,在第二课我有JsonPars功能lable.text - 致命错误

我需要写第二类的数据到第一类的标签。

这里是我的代码:

import UIKit 
    import CoreLocation 

    //main class 

    class ViewController: UIViewController{ 


    @IBOutlet weak var labl: UILabel! 

    @IBAction func btn(sender: AnyObject) { 
     Json().Pars() 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

} 

和第二类:

import Foundation 

//Json-class 
class Json { 
    func Pars() { 
     let url = NSURL(string: "http://my.url.com") 
     let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: {data, response, error -> Void in 
     if (error != nil){ 
      println(error.localizedDescription) 
     } 
     var err: NSError? 

     let parseObj: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &err) 

     if let json = parseObj as? NSDictionary{ 
      if let response = json["response"] as? NSDictionary{ 
       if let obj = response["Object"] as? NSDictionary{ 
        if let data = obj["data"] as? NSString { 
         println(data)//work's and i have a data 
         ViewController().labl.text = data //fatal error: unexpectedly found nil while unwrapping an Optional value 


         } 
        } 
       } 
      } 

     }) 

     task.resume() 
    } 
} 

对不起FO我的英语

+0

请将您的示例代码缩短为仅包含理解问题所需的内容。 –

回答

-2

对不起,我在我的联想类,所以我无法测试这,但尝试:

import Foundation 
import UIKit 

我通常这样做是为了防止我在某个时候需要它。此外,如果失败可能会尝试将数据发送给viewcontroller,然后将其应用于label.text。

编辑:你也有这样的:

}) 

以上task.resume,请查看,看看是否能不能解决问题。

1

问题是当您拨打ViewController()时,您正在创建ViewController的新实例。由于您未展示视图控制器,因此它的插座尚未设置,并且是nil。因此,当您尝试访问labl(隐式解包可选)时,它等于nil,并且您的应用程序崩溃。

要解决这个问题,或许pars()(按惯例使用小写字母的方法)可能会返回数据,然后您可以在您的ViewController类中使用这些数据。

+0

所以我必须得到标签 - ViewController类中的一些值,然后在Json类中更改我的数据? –