いつもお世話になっております。
iosアプリ開発の勉強中です。
Alamofireを使ったapi連携jsonデータ取得の勉強中です。(xcode 11.5 swift5.1 Alamofire 5.2.1)
pixabayのAPIから画像をもってくるアプリをudemyのチュートリアル で実装中です。
alamofireのエラーだと思うのですが、
esponseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
とでて、以下のように画像が元に表示されません。
下記コードをご覧いただくとわかるとおもうのですが、最初は検索ワードに"funny"を指定し、画像が表示されるはずです。
原因はなにが考えられるでしょうか?
swift
1import UIKit 2import Alamofire 3import SwiftyJSON 4import SDWebImage 5import Photos 6 7class ViewController: UIViewController { 8 9 @IBOutlet weak var odaiImageView: UIImageView! 10 11 @IBOutlet weak var commentTextView: UITextView! 12 13 //インクリメント 次の画像になると一個増える 14 var count = 0 15 16 @IBOutlet weak var searchTextField: UITextField! 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 // Do any additional setup after loading the view. 20 commentTextView.layer.cornerRadius = 20.0 21 PHPhotoLibrary.requestAuthorization { (status) in 22 switch(status) { 23 case .authorized: break 24 case .denied: break 25 case .notDetermined: break 26 case .restricted: break 27 } 28 } 29 30 //最初はfunny検索で画像を表示しておく 31 getImages(keyword: "funny") 32 33 } 34 35 //検索キーワードの値を元に画像を引っ張ってくる 36 //picabay.com 37 38 func getImages(keyword: String) { 39 let url = "https://pixabay.com/ai/?key=16341501-d599c0729acf4cfec7c6c7e66&q=(keyword)" 40 //Alamofireをつかって httpリクエストを投げる 41 //値が帰ってきて、それをJSON解析を行う 42 //imageView.imageに貼り付ける 43 AF.request(url, method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON { (response) in 44 45 switch response.result { 46 47 case .success: 48 49 let json:JSON = JSON(response.data as Any) 50 var imageString = json["hits"][self.count]["webformatURL"].string 51 52 if imageString == nil { 53 imageString = json["hits"][0]["webformatURL"].string 54 self.odaiImageView.sd_setImage(with: URL(string: imageString!), completed: nil) 55 }else{ 56 self.odaiImageView.sd_setImage(with: URL(string: imageString!), completed: nil) 57 } 58 59 60 case .failure(let error): 61 print(error) 62 63 } 64 65 } 66 } 67 68 @IBAction func nextOdai(_ sender: Any) { 69 count += 1 70 // getImages(keyword: string) 71 if searchTextField.text == "" { 72 getImages(keyword: "funny") 73 }else{ 74 getImages(keyword: searchTextField.text!) 75 } 76 77 } 78 79 @IBAction func searchAction(_ sender: Any) { 80 self.count = 0 81 // getImages(keyword: string) 82 if searchTextField.text == "" { 83 getImages(keyword: "funny") 84 }else{ 85 getImages(keyword: searchTextField.text!) 86 } 87 88 89 } 90 91 92 @IBAction func next(_ sender: Any) { 93 94 performSegue(withIdentifier: "next", sender: nil) 95 96 97 } 98 99 //prepareforsegueメソッドは、上記next actionの外に書いているのはなぜ?? 100 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 101 let shareVC = segue.destination as? ShareViewController 102 shareVC?.commnetString = commentTextView.text 103 shareVC?.resultImage = odaiImageView.image! 104 } 105 106 107}
回答1件
あなたの回答
tips
プレビュー