2017-02-06 17 views
-2

BEGINNER ALERT! Пожалуйста, поговорите со мной, как будто я 5-летняя, потому что я новичок в этой платформе и языке. Я буду благодарен и необоснован.Ошибка NSURL в XCode 8.2.1

Я следующий код в моем Xcode проект, чтобы открыть веб-сайт в родном браузере с помощью кнопки на приложение домашней странице:

@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"); 
     } 
    }]; 
} 

На линии:

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

это выбрасывая следующую ошибку:

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

Рекомендуется использовать ; между двоеточием и @ символом перед URL. Я знаю, что некоторые из них устарели в новом формате Xcode и Swift, но я не могу найти прямой ответ на эту конкретную проблему. Заранее благодарю за вашу мудрость.

UPDATE

Спасибо людям, которые помогли с этим. В случае, если кто-то приходит через этот вопрос, вот код, который в конечном итоге работает на ощупь кнопку и открыть URL в родном браузере:

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

Я также должен был удалить исходную кнопку и соответствующую ссылку в ViewController, замените кнопку и сделайте новое соединение с ViewController, чтобы заставить его работать. Большое спасибо!

+1

Видимо, вы скопируете пасту в лучшем виде, вы просто скопировали объективный фрагмент кода для создания объекта nsurl внутри функции в быстром синтаксисе, вам повезло, что ваш mac не взорвался – TheFuquan

ответ

0

Похоже, вы пытаетесь использовать код Objective C в Swift-методе. Если ваш проект написан в Swift, то это (возможно) код, который нужно:

@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 
    } 
} 

я предлагаю вам работать через несколько учебников, чтобы изучить основы развития IOS.

+0

Метод, который он использовал, существует и компилируется, но доступен только в iOS 10, следовательно, 'if #доступный (iOS 10.0, *) {} else {} 'необходимо – Mentos

+0

Спасибо @JedSoane Это избавилось от сообщения об ошибке и позволило мне скомпилировать и запустить на симуляторе. Когда я нажимаю кнопку, это рушится. «THREAD 1: Signal SIGABRT» появляется в файле AppDelegate рядом со строкой: «класс AppDelegate: UIResponder, UIApplicationDelegate {« Любые идеи о том, почему это произойдет? Для меня это похоже на греков, но я учусь! –

+0

@ D.W. Я бы предположил, что вы подключены к методу, который не существует (например, если вы переименовали метод IBAction, кнопка все равно будет привязана к имени старого метода, и вы получите SIGABRT). Если вы используете раскадровки, откройте раскадровку, выберите кнопку, удалите старое соединение и создайте новый, связанный с новым методом. –

0

Первое: у вас есть faceURL в openURL, когда он должен быть spotiURL.

Второе: вы имеете в виду, чтобы преобразовать код, который вы скопировали из SO от Obj-C к Swift, который я буду делать для вас :)

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

Вопрос помечен правильно. Проблема в том, что OP не знает, что они копируют и вставляют код Objective-C в их файл Swift. – rmaddy

+0

Спасибо, @Mentos. Это похоже на работу, за исключением восклицательного знака в строке ниже, это ошибка: UIApplication.shared.openURL (spotiURL!) –

0

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

+0

Спасибо @Zeb. Работа над разбором нескольких предлагаемых решений этой проблемы. –