我有2节课。 在第一堂课我有一个标签和一个按钮,在第二课我有JsonPars功能
我需要将第二类数据写入第一类标签。
这是我的代码:
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()
}
}
对不起我的英文
答案 0 :(得分:1)
问题是,当您致电ViewController
时,您正在创建ViewController()
的新实例。由于您还没有提供视图控制器,因此它的出口尚未设置且为nil
。因此,当您尝试访问labl
(隐式解包的可选项)时,它等于nil
并且您的应用程序崩溃了。
要解决此问题,可能pars()
(它的方法使用小写方法)可以返回数据,然后您可以在ViewController
类中访问该数据。
答案 1 :(得分:-2)
抱歉,我在联想上课,所以我无法测试,但请尝试:
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)opt
{
// Content
UILabel * aLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 200, 40)];
aLbl.text = @"In-call status bar issue";
UIViewController * aContent = [[UIViewController alloc] init];
aContent.title = @"Title";
aContent.view.backgroundColor = UIColor.whiteColor;
[aContent.view addSubview:aLbl];
UINavigationController * aNav = [[UINavigationController alloc]
initWithRootViewController:aContent];
// Parentmost view controller containing the navigation view controller
UIViewController * aParent = [[UIViewController alloc] init];
[aParent.view addSubview:aNav.view];
[aParent addChildViewController:aNav];
[aNav didMoveToParentViewController:aParent];
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
self.window.rootViewController = aParent;
[self.window makeKeyAndVisible];
return YES;
}
@end
int main(int argc, char ** argv)
{ @autoreleasepool { return UIApplicationMain(argc, argv, nil, @"AppDelegate"); } }
我通常会这样做,以防我在某些时候需要它。此外,如果失败,可以尝试将数据发送到viewcontroller,然后将其应用于label.text。
编辑:你也有:import Foundation
import UIKit
上面的task.resume,请查看它,看看是否无法修复它。