调用app delegate的didRegisterForRemoteNotificationsWithDeviceToken

时间:2016-04-28 19:38:29

标签: ios swift webview

使用最新版本的XCode和Swift。

我用webview创建了一个简单的应用程序。控制器内的IBOutlet正确连接。在viewDidLoad()中加载请求时,一切似乎都没问题。

但是,我想将设备令牌传递给webview。我在AppDelegate中使用以下函数:

var vc = ViewController()
...
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    var token = NSString(format: "%@", deviceToken)
    token = token.stringByReplacingOccurrencesOfString( "<", withString: "")
    token = token.stringByReplacingOccurrencesOfString( ">", withString: "")
    token = token.stringByReplacingOccurrencesOfString(" ", withString: "")
    vc.deviceToken = token as String;
    vc.loadSomeUrl()
}

loadSomeUrl()函数如下所示:

func loadSomeUrl() {
    let url = NSURL (string: "http://google.de" );
    let requestObj = NSURLRequest(URL: url!);

    webview.loadRequest(requestObj);

}

运行应用程序时,我收到以下消息:

fatal error: unexpectedly found nil while unwrapping an Optional value

我完全不知道问题是什么。我发现webview突然变为零,尽管之前调用了viewDidLoad()。我添加了一个print(webview)到viewDidLoad(),它正常工作。将print(webview)添加到loadSomeUrl()时;上述致命错误也会被触发。

为了进一步调查,我将以下代码段添加到插座中。

 @IBOutlet var webview: UIWebView!{
    didSet {
        print("webview set to %@", webview);
    }
}

外面很好。输出后会出现上述错误。

webview set to %@ <UIWebView: 0x145d18910; frame = (0 0; 600 556); autoresize = RM+BM; layer = <CALayer: 0x145d20f20>> fatal error: unexpectedly found nil while unwrapping an Optional value

有人知道问题是什么吗?也许我以错误的方式解决了整个问题。

1 个答案:

答案 0 :(得分:1)

我认为在AppDelegate中您正在创建VC的新实例,并且webView是零。

var vc = ViewController()

所以你需要从故事板加载AppDelegate中的ViewController。

另一种方法是在收到令牌时向viewController发送通知。

在对象中:

[[NSNotificationCenter defaultCenter] postNotificationName:@"tokenNotification" object:token userInfo:userInfo];

夫特:

//AppDElegate

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)
    {
        var token = NSString(format: "%@", deviceToken)
        token = token.stringByReplacingOccurrencesOfString( "<", withString: "")
        token = token.stringByReplacingOccurrencesOfString( ">", withString: "")
        token = token.stringByReplacingOccurrencesOfString(" ", withString: "")

        NSNotificationCenter.defaultCenter().postNotificationName("tokenNotification", object: token);

    }

// VC
override func viewDidLoad() {
        super.viewDidLoad()


        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.loadSomeUrl), name: "tokenNotification", object: nil)

    }

func loadSomeUrl(notification:NSNotification) {
        let url = NSURL (string: "http://google.de" );
        let requestObj = NSURLRequest(URL: url!);

        webview.loadRequest(requestObj);

    }