2017-02-06 5 views
-2

ANFÄNGER ALARM! Bitte sprechen Sie mit mir, als wäre ich ein 5-Jähriger, weil ich neu in dieser Plattform und Sprache bin. Ich werde dankbar und ungebremst sein.NSURL Fehler in XCode 8.2.1

Ich habe den folgenden Code in meinem Xcode-Projekt eine Website in dem nativen Browser über eine Schaltfläche auf der App-Homepage zu öffnen:

@IBAction func faceURL(_ sender: Any) { 
    NSURL *spotiURL = [NSURL URLWithString:@"https://www.facebook.com"]; 

    [[UIApplication sharedApplication] openURL:faceURL options:@{} completionHandler:^(BOOL success) { 
     if (success){ 
      NSLog(@"Opened url"); 
     } 
    }]; 
} 

Auf der Linie:

NSURL *spotiURL = [NSURL URLWithString:@"https://www.facebook.com"]; 

es ist den folgenden Fehler werfend:

Expected "," separator Consecutive statements on a line must be separated by ";"

Es empfiehlt, einezu setzenzwischen dem Doppelpunkt und @ Symbol vor der URL. Ich weiß, dass einige davon mit dem neuen Xcode- und Swift-Format veraltet sind, aber ich kann keine eindeutige Antwort für dieses spezielle Problem finden. Vielen Dank im Voraus für Ihre Weisheit.

UPDATE

Vielen Dank an die Leute, die mit dieser geholfen. Falls jemand kommt sonst über dieses Problem, hier ist der Code, den Knopf berühren Arbeit beendet und eine URL in dem nativen Browser öffnen:

@available(iOS 10.0, *) 
@IBAction func openURL(_ sender: Any) { 
let openURL = URL(string: "https://www.facebook.com") 
UIApplication.shared.open(openURL!, options: [:], completionHandler: nil) 
} 

Ich musste auch die Original-Taste und entsprechende Referenz in denen löschen ViewController, ersetzen Sie die Schaltfläche, und führen Sie eine neue Verbindung mit ViewController, um es zu funktionieren. Danke vielmals!

+1

Anscheinend kopieren Sie Paste ist von seiner besten, Sie kopierten gerade ein objektiver c-Ausschnitt für die Schaffung des nsurl Gegenstandes innerhalb einer Funktion in einer schnellen Syntax, Sie haben Glück gehabt, dass Ihr Mac nicht explodierte – TheFuquan

Antwort

0

Es sieht so aus, als ob Sie versuchen, Objective-C-Code in einer Swift-Methode zu verwenden. Wenn Ihr Projekt in Swift geschrieben wird, dann ist dies (wahrscheinlich) der Code, den Sie benötigen:

@IBAction func faceURL(_ sender: Any) { 

    if let facebookURL = URL(string: "https://www.facebook.com") 
    { 
     UIApplication.shared.openURL(facebookURL) // the open method you were using doesn't exist in Swift 
    } 
} 

Ich würde vorschlagen, Sie durch ein paar Tutorials arbeiten, um die Grundlagen der iOS Entwicklung zu lernen.

+0

Die Methode, die er verwendet hat, existiert und kompiliert, ist aber nur in iOS 10 verfügbar, daher ein 'if #available (iOS 10.0, *) {} else {} 'wird benötigt – Mentos

+0

Danke @JedSoane Das wurde die Fehlermeldung los und erlaubte mir, auf dem Simulator zu kompilieren und zu laufen. Wenn ich auf den Knopf klicke, stürzt er ab. "THREAD 1: Signal SIGABRT" erscheint in der AppDelegate-Datei neben der Zeile: "class AppDelegate: UIResponder, UIApplicationDelegate {" Irgendwelche Ideen, warum das passieren würde? Das ist wie griechisch für mich, aber ich lerne! –

+0

@ D.W. Ich würde vermuten, dass die Schaltfläche mit einer Methode verbunden ist, die nicht existiert (wenn Sie beispielsweise die IBAction-Methode umbenannt haben, wird die Schaltfläche weiterhin mit dem alten Methodennamen verknüpft und Sie erhalten eine SIGABRT). Wenn Sie Storyboards verwenden, öffnen Sie das Storyboard, wählen Sie die Schaltfläche aus, löschen Sie die alte Verbindung und erstellen Sie eine neue Verknüpfung mit der neuen Methode. –

0

Erstens: Sie haben faceURL in openURL wenn es spotiURL sein sollte.

Zweitens: Sie meinen den Code, den Sie von SO von Obj-C zu Swift kopiert zu konvertieren, die ich für Sie tun :)

let spotiURL = URL(string: "https://www.facebook.com") 
UIApplication.shared.openURL(spotiURL!) 
+0

Die Frage wird richtig getaggt. Das Problem ist, dass das OP nicht weiß, dass sie Objective-C-Code in ihre Swift-Datei kopiert und eingefügt hat. – rmaddy

+0

Danke, @Mentos. Dies scheint zu funktionieren, außer das Ausrufezeichen in der Zeile unten wirft einen Fehler auf: UIApplication.shared.openURL (spotIURL!) –

0

Nun, Sie mischen Swift (erste Zeile) und ObjC (alle anderen) Syntax, so dass Sie zuerst eine von ihnen wählen müssen. Ihr "gemischter" Code sieht übrigens gut aus.

+0

Danke @Zeb. Sie arbeiten an der Analyse mehrerer vorgeschlagener Lösungen für dieses Funktionalitätsproblem. –

Verwandte Themen