2016-05-17 3 views
0

Я получаю нулевую ошибку. Но я не понимал, почему это произошло. Я могу получить selectedPhoto имя с печатью. Но я не могу использовать в NSUrl. Не могли бы вы мне помочь?Неустранимая ошибка: Неожиданно найдено нуль при развертывании Необязательное значение NSURL

мои коды:

print(selectedPhoto) 

    if selectedPhoto != nil 
    { 
     let photoUrl = NSURL(string: "http://www.kerimcaglar.com/uploads/yemek-resimler/\(selectedPhoto)") 
     print("photo url: \(photoUrl)") 
     dataPhoto = NSData(contentsOfURL:photoUrl!) 
     yemekResim.image = UIImage(data: dataPhoto!) 
    } 

    else 
    { 
     print("Error") 
    } 
+0

Можете ли вы показать, что именно он генерирует? –

+1

Распечатайте 'dataPhoto' - это, вероятно, то, что возвращает' nil', если ваш 'photoUrl' не является. Хотя вы действительно не должны быть силой разворачивания. Вы должны написать логику, чтобы иметь дело с случаем, когда либо 'photoUrl', либо' dataPhoto' является 'nil', а не просто скрещивают пальцы и надеются, что это не так. Просто потому, что 'selectedPhoto' существует, не означает, что ваш url или данные будут. [См. Этот вопрос и ответы для получения дополнительной информации о том, почему повреждение силы плохое) (http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil-while-unwrapping-an-optional-valu). – Hamish

+0

@JigarTarsariya У меня есть табличный вид. На нем будет список имен мяса, когда я нажму кнопку «Создать новую страницу». Изображение мясного фото и описание об этом. Http://www.kerimcaglar.com/yemek-tarifi это мой источник json. Meat photo www.kerimcaglar.com/yemek-resimler/PHOTONAME – Kerim

ответ

2

Из яблок документации по NSData (conten tsOfURL)

Do not use this synchronous method to request network-based URLs. For network-based URLs, this method can block the current thread for tens of seconds on a slow network, resulting in a poor user experience, and in iOS, may cause your app to be terminated.

Если ваше приложение выходит из строя, из-за этого оно будет отклонено из магазина.

Вместо этого вы должны использовать NSURLSession. С блоком обратного вызова Async, как в моем примере. Также это не хорошая идея, чтобы заставить UnWrap OPTIONALS ! как вы получите запустить ошибки времени вместо того, чтобы использовать if let синтаксис

Смотрите мой пример ниже.

if let photo = selectedPhoto{ 
      let photoUrl = NSURL(string: "http://www.kerimcaglar.com/uploads/yemek-resimler/\(photo)") 
      if let url = photoUrl{ 
       NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {(data, response, error) in 
        if let d = data{ 
         dispatch_async(dispatch_get_main_queue(), { 
          if let image = UIImage(data: d) { 
           self.yemekResim.image = image 
          } 
         }) 


        } 
       }).resume() 
      } 
     } 
    } 
+0

Во-вторых, ваши решения лучше, чем другие :) спасибо. – Kerim

0

Replace это:

let photoUrl = NSURL(string: "http://www.kerimcaglar.com/uploads/yemek-resimler/\(selectedPhoto)") 

с этим:

let photoUrl = NSURL(string: "http://www.kerimcaglar.com/uploads/yemek-resimler/\(selectedPhoto!)") 

(Обратите внимание, что после того, как selectedPhoto "!")

+0

Это сработало спасибо, но если я вдруг выберу другую строку, то получаю ту же ошибку. В любом случае, я получил его :) – Kerim

+0

Многое может привести к этой ошибке, так что это может быть от другого фрагмента кода – Roee84

+0

@Kerim. Пожалуйста, посмотрите на мой пример, это намного безопаснее, и в строке будут рекомендации от Apple. – kent

Смежные вопросы

 Смежные вопросы