1
let imgURL:NSURL = NSURL(string: "\(ImageName)")!

上記の行で、致命的なエラーが発生しています

致命的なエラー: オプション値のラップ解除中に予期せず 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」を印刷すると、データベースから名前が正しく返されますが、画像を保持できません

実行中にエラーが発生します。

4

4 に答える 4

3

あなたはそれを言う

「ImageName」を印刷すると、データベースから名前が正しく返されます

次に、ImageNameが URL に対して無効であることを意味する必要があります。

その説明を見ると、次のように書かれNSURL(string:) ています。

NSURL オブジェクトの初期化に使用する URL 文字列。この URL 文字列は、RFC 2396 で説明されている URL 形式に準拠する必要があり、nil であってはなりません。このメソッドは、RFC 1738 および 1808 に従って URLString を解析します。

そこで問題は...どのようにImageName見えますか?そして、それから URL を作成できますか?

それとは別に、@ PhillipMillsが言うよう?に代わりに使用することは常に良い考えです!

更新: URL の例を投稿したことがわかります。遊び場でこれを行う場合:

let url = NSURL(string: " goo.gl/pBmA0d")

nilは見返りを得るので、短い URL とNSURLは親友ではないように思われます。

更新 2 : うーん、私がすぐに話したと思います。上記を見ると、goo.gl 部分の前にスペースがあることがわかります。これを次のように変更すると:

let url = NSURL(string: "goo.gl/pBmA0d")

実際に動作し、NSURLオブジェクトを取得します。

しかし、あなたのコードで私が見つけた別のこと。ImageNameここで String として宣言します。

let ImageName = obj["image"] as! String

\()したがって、後でラップする必要はありません

let imgURL:NSURL = NSURL(string: "\(ImageName)")!

あなたは簡単に言うことができます:

let imageURL = NSURL(文字列: ImageName)

そして...他の人が言ったよう?に、代わりに使用することは常に良い考えです!

したがって、次のように書くことができます。

if let imageName = obj["image"] as? String,
   let imageURL = NSURL(string: imageName) {
   //we're in business :-)
}

安全で健全であること

于 2016-03-23T12:46:01.660 に答える
2

使用するguardif 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()
于 2016-03-23T12:44:54.730 に答える
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()
于 2016-03-23T13:15:06.713 に答える
0

強制アンラップを行わないでください...クラッシュを避けるために let を使用してください...

 if let img = obj["image"] as? String, 
      imgURL = NSURL(string: img) {

     // ... continue with your code ...
 }
于 2016-03-23T12:39:13.767 に答える