let imgURL:NSURL = NSURL(string: "\(ImageName)")!
在上面一行,我正在致命的错误
致命错误:在展开Optional值时意外发现nil (lldb)
代码:
let ImageName = obj["image"] as! String
let imgURL:NSURL = NSURL(string: "\(ImageName)")!
let request: NSURLRequest = NSURLRequest(URL: imgURL)
let session = NSURLSession.sharedSession()
let Imgtask = session.dataTaskWithRequest(request){
(data, response, error) -> Void in
if (error == nil && data != nil)
{
func display_image()
{
pointAnnoation.DisplayImage = UIImage(data: data!)
}
dispatch_async(dispatch_get_main_queue(), display_image)
}
}
Imgtask.resume()
从上面的代码中我试图在注释
中存储来自数据库的图像如果我打印'ImageName',它会正确地从数据库中返回名称,但无法保留图像
它在运行时导致错误。
答案 0 :(得分:3)
你说那个
如果我打印'ImageName',它会正确地从数据库中返回名称
然后,这必须意味着ImageName
对于网址无效
如果您查看NSURL(string:)
的{{3}},则说:
用于初始化NSURL对象的URL字符串。此URL字符串必须符合RFC 2396中所述的URL格式,且不得为零。此方法根据RFC 1738和1808解析URLString。
所以问题是...... ImageName
看起来怎么样?你可以从中创建一个URL吗?
除此之外,使用?
代替!
始终是个好主意,因为@PhillipMills说
更新:我现在可以看到您发布了一个网址示例。如果我在操场上这样做:
let url = NSURL(string: " goo.gl/pBmA0d")
我得到nil
作为回报,所以看起来短网址和NSURL
并不是最好的朋友。
更新2 :嗯,我想快速说话,如果你看一下上面你可以看到我在goo.gl部分之前有空格,如果我改为:
let url = NSURL(string: "goo.gl/pBmA0d")
它实际上有效,我得到一个NSURL
对象。
但是我在你的代码中偶然发现了另一件事。您在此处将ImageName
声明为字符串:
let ImageName = obj["image"] as! String
所以你不必在\()
稍后将其包装在
let imgURL:NSURL = NSURL(string: "\(ImageName)")!
你可以简单地说:
让imageURL = NSURL(字符串:ImageName)
然后......正如其他人所说,使用?
代替!
所以你可以写:
if let imageName = obj["image"] as? String,
let imageURL = NSURL(string: imageName) {
//we're in business :-)
}
安然无恙
答案 1 :(得分:2)
尝试使用guard
或if let
来帮助自己。
let ImageName = obj["image"] as! String
if let imgURL = NSURL(string: ImageName) {
let request: NSURLRequest = NSURLRequest(URL: imgURL)
let session = NSURLSession.sharedSession()
let Imgtask = session.dataTaskWithRequest(request){ (data, response, error) -> Void in
if (error == nil && data != nil)
{
// What's that func??
func display_image()
{
pointAnnoation.DisplayImage = UIImage(data: data!)
}
dispatch_async(dispatch_get_main_queue(), display_image)
}
}
}
Imgtask.resume()
答案 2 :(得分:0)
不要强制打开...如果让我们避免崩溃......
if let img = obj["image"] as? String,
imgURL = NSURL(string: img) {
// ... continue with your code ...
}
答案 3 :(得分:0)
请尝试以下代码:
//ImageName is a String type.
guard let ImageName = obj["image"] as? String , let imgURL = NSURL(string: ImageName) else{
return
}
let request: NSURLRequest = NSURLRequest(URL:imgURL)
let session = NSURLSession.sharedSession()
let Imgtask = session.dataTaskWithRequest(request){
(data, response, error) -> Void in
if (error == nil && data != nil)
{
func display_image()
{
pointAnnoation.DisplayImage = UIImage(data: data!)
}
dispatch_async(dispatch_get_main_queue(), display_image)
}
Imgtask.resume()