2016-08-02 38 views
7

Ich möchte viele Konten der gleichen Website in anderen webView anmelden. Zum Beispiel habe ich Tab Bar Controller, enthält drei View-Controller und jede View-Controller enthalten webView. Und zum Beispiel bette ich stackoverflow URL für webView in jeder Klasse ein. Wie kann sich der Benutzer mit diesen drei webView gleichzeitig bei verschiedenen Konten anmelden? Ich habe das versucht, aber ich kann nur einen Benutzer auf einmal anmelden. Ich habe festgestellt, dass ich separate cookie für jede UIWebView erstellen muss, aber meistens Antworten sind in objective-c und nicht die richtige Antwort, die ich will. Zum Beispiel (FirstSecondThird) Kann mir bitte jemand sagen, wie ich es tun kann?Separate Cookie-Speicher für zwei (UIWebView oder WKWebView)

class FirstViewController: UIViewController , UIWebViewDelegate{ 

    @IBOutlet weak var webView: UIWebView! 
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView! 

    override func viewDidLoad() { 
     webView.delegate = self 
     let requestURL = NSURL(string: "http://stackoverflow.com") 
     let request = NSURLRequest(URL: requestURL!) 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.startAnimating() 
     webView.loadRequest(request) 

    } 
     func webViewDidFinishLoad(webView: UIWebView) { 
     activityIndicator.stopAnimating() 
    } 

} 

class SecondViewController: UIViewController, UIWebViewDelegate{ 

    @IBOutlet weak var webView: UIWebView! 
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView! 

    override func viewDidLoad() { 
     webView.delegate = self 
     let requestURL = NSURL(string: "http://stackoverflow.com") 
     let request = NSURLRequest(URL: requestURL!) 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.startAnimating() 
     webView.loadRequest(request) 

    } 
     func webViewDidFinishLoad(webView: UIWebView) { 
     activityIndicator.stopAnimating() 
    } 


} 

Dank

The preview of my executing code.

+0

Ich las viele Beiträge über separate Keksdose oder Speicher per (uiwebview, wkwebview), aber habe keine Hilfe bekommen. Ich überprüfe, dass das auch in OS X sehr schwierig ist (http://stackoverflow.com/questions/364219/how-can-i-have-multiple-instances-of-webkit-without-sharing-cookies) (http: // stackoverflow.com/questions/28456789/separate-cookie-jar-per-webview-in-o-s-x) (https://github.com/jjconti/swift-webview-isolated) (https://github.com/) cyyuen/ADCookieIsolatedWebView) Hat jemand eine Idee, wie ich das erreichen kann ?? – ZAFAR007

+0

hast du [this] (http://igisolatedcookiewebview.googlecode.com/) versucht? – ddb

+0

@ddb ja, ich war das überprüfen, aber das ist für OS X. Cocoa ist das Mac-Entwicklungssystem. Es existiert nicht auf iOS. – ZAFAR007

Antwort

4

Sie können dies durch die Verwendung verschiedener Instanzen WKWebSiteDataStore mit WKWebView tun:

let configuration1 = WKWebViewConfiguration() 
configuration1.websiteDataStore = WKWebsiteDataStore.nonPersistent() 
self.webView1 = WKWebView(frame: CGRect.zero, configuration: configuration1) 
self.view.addSubview(self.webView1) 

let configuration2 = WKWebViewConfiguration() 
configuration2.websiteDataStore = WKWebsiteDataStore.nonPersistent() 
self.webView2 = WKWebView(frame: CGRect.zero, configuration: configuration2) 

Leider werden Sie webView Daten (wie zB Cookies verlieren, Cache usw.) nach dem Neustart der App, da nicht persistente WKWebsiteDataStore nicht gespeichert werden kann t o Festplatte (Sie können feststellen, dass WKWebsiteDataStore implementiert NSCoding, aber es funktioniert nicht für nicht persistente Speicher).

+0

Ermolov, Danke. Ich wurde gesehen [WKWebSiteDataStore] (https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKWebsiteDataStore_Class_Ref/), aber das ist nur in iOS 9 verfügbar. Haben Sie eine Idee, wie ich das tun kann iOS 8. Auch ich überprüfe Ihren Code gibt mir diesen Fehler ** Typ 'WKWebsiteDataStore' hat kein Mitglied 'nonPersistent' ** ?? – ZAFAR007

+0

Es gibt private Klasse '_WKWebsiteDataStore' mit Methode' nonPersistentDataStore' und private Eigenschaft '_WKWebsiteDataStore * _websiteDataStore' in' WKWebViewConfiguration', die in iOS 8 verfügbar sind. Sie können Instanzen dieser Klasse mit Laufzeitfunktionen erstellen (Informationen zur Laufzeit in Objective-C)). Außerdem müssen Sie wissen, dass Apple die Verwendung von privaten Klassen/Methoden im Produktionscode untersagt, aber Sie können es in Ihrem Testprojekt versuchen. Der obige Fehler bezieht sich auf die Version von Swift, die Sie verwenden. Ich benutze Swift 3 (Xcode 8 beta), möglicherweise müssen Sie den Namen der Methode in 'nonPersistentDataStore' ändern. –

+0

Danke jetzt funktioniert es. Sie meinen, ich kann nur private Klasse/Methoden für Testprojekt nicht für die Bereitstellung im App Store verwenden. Ich habe noch eine Frage an Sie, können Sie bitte sagen, gibt es eine Möglichkeit, Cookie auf Speicher mit dieser Methode für das nächste Mal zu öffnen wkwebview von wo ich es nach Neustart App verlassen? – ZAFAR007