質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1493閲覧

swift iosアプリ開発 pixabayのAPIを用いてAlamofireとswiftyjsonで画像をもってきてコメントするアプリのエラー

shutainer

総合スコア11

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/06/23 04:35

いつもお世話になっております。

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/06/23 05:08

そもそも、指定したURLにブラウザでアクセスした場合には正しいJSONが得られるのでしょうか。 試しにアクセスした場合には 404 エラーが出てみることができませんでした。
TsukubaDepot

2020/06/23 05:40

ai -> api とすると正しい JSON が取得できるみたいですね。 おそらく、SD WebImage での画像取得もできているのではないかと思います。 もし、これで解決したようであれば、自己解決ということで質問を閉じていただけないでしょうか(未解決だと思い他の方が見る可能性もあるため)。 よろしくお願いいたします。
shutainer

2020/06/23 05:52

承知いたしました。
guest

回答1

0

自己解決

ai→api

の誤記でした。

投稿2020/06/23 05:52

shutainer

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問