2016-01-07 3 views
0

Я пытаюсь присоединить deviceToken к URL перед webView loadRequest, так что я могу GET значение с помощью PHP сценария. Моя проблема заключается в том, что функция didFailToRegisterForRemoteNotificationsWithError, содержащая значение deviceToken, запускается/запускается последним. deviceToken прилагается послеloadRequest, что не так, как мне было нужно.Swift - добавление параметров NSURL перед загрузкой его в UIWebView

Есть ли какой-либо способ его передачи перед тем, как он загрузится?

+1

На самом деле нет делегата или функции, чтобы перехватить это. Единственный способ, по которому я могу это сделать, - либо перезагрузить веб-просмотр с помощью нового NSURL после его изменения с помощью токена устройства, либо сначала получить маркер устройства, а затем загрузить UIWebview. –

+0

@TedHuinink Я создал функцию для webView.loadRequest. Обычно он вызывается внутри функции viewDidLoad. Где я должен это назвать, чтобы я мог сначала вызвать функцию для получения маркера устройства? – Scar

+0

@TedHuinink Прежде всего, извините за вопрос. Я просто новичок в Свифте. Спасибо, что дал мне идею, я это сделал. Я прочитал о времени отправки и использовал его для перезагрузки моей страницы с помощью токена устройства. Спасибо. – Scar

ответ

0

Вот как я решил мою проблему:

Примечание:

Следующий код не может быть столь же полируется, как ваша. Я все еще начинаю изучать Свифта, поэтому простите меня за «грязный» код.

Вот мой ViewController:

override func viewDidLoad(){ 
     super.viewDidLoad() 

//Reference to my AppDelegate 

     let ad = UIApplication.sharedApplication().delegate as! AppDelegate 
     ad.regDevTok() 
     loadAddressURL() 

     //reload 
     let time = dispatch_time(dispatch_time_t(DISPATCH_TIME_NOW), 5 * Int64(NSEC_PER_SEC)) 
     dispatch_after(time, dispatch_get_main_queue()) { 
      var url = NSURL(string: "http://yourSite/sampleIndex.php?token=\(token)") 
      var requestObj = NSURLRequest(URL: url!, 
       cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData, 
       timeoutInterval: 3.0) 

      self.webView.loadRequest(requestObj) 
     } 
    } 

    //Setting up GUI of webview 
    func loadAddressURL() { 
     var myURL = NSURL(string: "http://www.yourSite.com/sampleIndex.php") 
     var reqURL = NSURLRequest(URL : myURL!) 
     webView.loadRequest(reqURL) 
     NSLog("loadAddressURL") 
    } 

А вот мой AppDelegate:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
     //var token was initiated as a global variable 
     token = deviceToken.hexString() 
    } 

func regDevTok(){ 
     // Device Token 
     let deviceToken = defaults.objectForKey("DeviceToken") as! String? 
     if (deviceToken == nil) { 
      let type: UIUserNotificationType = [UIUserNotificationType.Badge, UIUserNotificationType.Alert, UIUserNotificationType.Sound] 
      let setting = UIUserNotificationSettings(forTypes: type, categories: nil) 
      UIApplication.sharedApplication().registerUserNotificationSettings(setting) 
      UIApplication.sharedApplication().registerForRemoteNotifications() 
     } 
    } 

Спасибо сэр @Ted Huinink и сэр @Mahesh за предоставленную мне идеи, чтобы придумать решение.