2016-05-13 6 views
1

zu laden, arbeite ich mit swift 2.2 und habe eine App entwickelt, die eine Tabellenansicht hat. Beim Tippen auf eine bestimmte Zeile lade ich eine Webansicht. Alles scheint perfekt und funktioniert perfekt auf einem iPad, das auf iOS 9 läuft. Wenn ich versuche, dieselbe App zu laden und die Webansicht auf ein iOS 7-Gerät zu laden, stürzt die App ab. Der Code istApp stürzt ab Wenn ich versuche, eine Webansicht in iOS 7

class AppCatalogViewController: UIViewController , UIWebViewDelegate { 

var alertView = UIAlertView() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSLog("enetered the webView view controller") 
    self.title = NSLocalizedString("mdm.agent.common.appCatalog", comment : "") 
    self.view.autoresizesSubviews = true 
    alertView = UIAlertView(title: NSLocalizedString("mdm.agent.common.loadingData", comment: ""), message: "", delegate: nil, cancelButtonTitle: nil, otherButtonTitles: "") 
    let actInd : UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) 
    actInd.startAnimating() 
    actInd.frame = CGRectMake(125, 60, 37, 37) 
    alertView.addSubview(actInd) 
    //Change self.view.bounds to a smaller CGRect if you don't want it to take up the whole screen 
    NSLog("setting the frame of the webview") 
    let webView : UIWebView = UIWebView(frame: self.view.bounds) 

    webView.autoresizingMask = UIViewAutoresizing.FlexibleWidth 
    webView.scalesPageToFit = true 
    webView.autoresizesSubviews = true 
    webView.delegate = self 



    let persist = Persistence() 
    let url : String = "https://\(persist.getObject(mdmiosagent_Constants.SERVERNAMEKEY)):\(persist.getObject(mdmiosagent_Constants.SERVERPORTKEY))/showAppsList.mobapps?udid=\(persist.getObject(mdmiosagent_Constants.UDIDKEY))&isNativeAgent=true&authtoken=\(defaults.authToken)&SCOPE=\(defaults.scope)" 

    let request : NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: url)!) 
    request.timeoutInterval = 10 
    var userAgent : String = "" 
    if(UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Phone) { 
     userAgent = "iPhone" 
    } else { 
     userAgent = "iPad" 
    } 

    request.setValue(userAgent, forHTTPHeaderField: "User-Agent") 

    webView.loadRequest(request) 

    self.view.addSubview(webView) 
    alertView.show() 

} 

func webViewDidStartLoad(webView: UIWebView) { 

} 
func webViewDidFinishLoad(webView: UIWebView) { 

    alertView.dismissWithClickedButtonIndex(-1, animated: true) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func showError(error : NSString) { 
    let alert : UIAlertView = UIAlertView(title: NSLocalizedString("mdm.agent.common.error", comment: ""), message: error as String, delegate: nil, cancelButtonTitle: "mdm.agent.common.okay", otherButtonTitles: "", "") 
    alert.show() 
} 
// method to check authentication 
func connection(connection: NSURLConnection, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge) { 

    if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) { 
     challenge.sender!.useCredential(NSURLCredential(forTrust: (challenge.protectionSpace.serverTrust!)), forAuthenticationChallenge: challenge) 
    } 
    challenge.sender?.continueWithoutCredentialForAuthenticationChallenge(challenge) 
} 

Das funktioniert perfekt auf iOS 9 Gerät .. und den Fehler, der ist für iOS 7-Gerät im Protokoll angezeigt Seine

May 13 12:58:38 iPhone mdm.ios[1040] <Error>: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 
*** First throw call stack: 
(0x2fc3bf83 0x3a3ecccf 0x2fb75f0d 0x328f21af 0x328f2f75 0x328f352b 0xdcd84 0xdce24 0x3245d4ab 0x3245d269 0x325e936b 0x32506d63 0x32506b6d 0x32506b05 0x32458d59 0x320d662b 0x320d1e3b 0x320d1ccd 0x320d16df 0x320d14ef 0x320cb21d 0x2fc07255 0x2fc04bf9 0x2fc04f3b 0x2fb6febf 0x2fb6fca3 0x34a75663 0x324bc14d 0xc1318 0x3a8f9ab7). 

Kann jemand herausfinden, was der Grund sein könnte?

+1

ist das Problem nicht in der TableView? Wie der Fehler andeutet, fügen Sie nil in ein Array ein, aber ich sehe irgendwelche Arrays im obigen Code? – Scriptable

+0

Es gibt keine Probleme mit der TableView, es funktioniert perfekt –

+0

in der Tat habe ich NSArray nirgendwo in meinem Projekt verwendet –

Antwort

0

Ich habe versucht, Ihren Code, es funktioniert gut. Die Ausnahme, die sagt:

[__NSArrayM insert: atIndex:]: Objekt kann nicht Null sein‘

wahrscheinlich kommen, weil Sie versuchen, eine Zeichenfolge, wo zum Beispiel der Dateien Localizable zu lokalisieren. Strings existierten bereits, wurden aber noch nicht lokalisiert.

Dies ist der Fall, wenn eine alte Version Ihrer App auf Ihrem iOS7-Gerät oder Simulatorgerät gestartet wurde und Sie die neue Version erneut ausführen. Diese nicht lokalisierte Datei befindet sich jedoch weiterhin im Ressourcenordner des Anwendungspakets.

Wenn Sie eine neue Version Ihrer App erstellen, werden nicht verwendete Dateien nicht gelöscht. Der beste Weg ist also, die App vollständig von Ihrem Simulator oder realen Gerät zu entfernen, den Cache zu leeren und erneut einen Lauf zu erstellen.

Darüber hinaus, wie Sie von den Kommentaren erklären, verursachen die Update-Situation durch App Catalog diese Art von Absturz. Der beste Weg, um diese Art von Sache zu vermeiden, ist, Ihre Lokalisierung mit, wenn lassen oder Schutzbedingungen zu schützen.

Ab iOS 7 glaube ich, dass Sie Zeichenketten UTF-8 anstelle von UTF-16 machen können.

Von official Apple doc:

Hinweis: Es wird empfohlen, dass Sie Strings von Dateien mit der UTF-8-Codierung speichern, die die Standard-Kodierung für Standard-Strings Dateien ist. Xcode transformiert Zeichenkettendateien automatisch von UTF-8 nach UTF-16, wenn in das Produkt kopiert werden. Weitere Informationen zum Dateiformat für Standardzeichenfolgen finden Sie unter Erstellen von Zeichenfolgenressourcendateien. Für Weitere Informationen über Unicode und seine Textkodierungen finden Sie unter http://www.unicode.org/ oder http://en.wikipedia.org/wiki/Unicode.

+0

Ich muss die Updates dieser App durch App-Katalog, wo der Benutzer ein Update erhält und die App aktualisiert wird. Doch das Programm erfolgreich durchquert 'self.view.addSubview (webView)' aber stürzt ab, wenn alertview.show() –

+0

genannt wird, und wenn das der Fall ist, dann sollte die App auf ios 9 als wel abgestürzt? –

+0

Ich meine, wie stürzt es nicht in IOS 8 oder 9? \ –

Verwandte Themen