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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

API

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

Q&A

解決済

1回答

3646閲覧

AlamofireのAPI非同期処理の待機処理

beginer_dev

総合スコア16

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

API

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

0グッド

0クリップ

投稿2016/09/23 02:43

編集2016/09/23 03:11

Swift3、Xcode8でAPIを用いた結果をtableviewcellに表示したいのですが

デバックで確認すると、描画が終わってからAPIの結果が返ってきてcellが空の状態で描画されます。

色々調べてAlamofireを用いてAPI(JSON形式)を取得してSwiftyJSONで遅れて結果の出力は確認出来たのですがAPIの結果がtableviewcellに描画されるまで待つにはどのようにAlamofireを使用すればよいのでしょうかご教授ください。

追記
元tableviewのcellをタップ→storyboard上でe.g.pushにて次tableviewに遷移
そしてtableviewcellに描画

この流れの今元tableviewのcellをタップでAPIの結果をe.g.push前に欲しいのですがe.g.push後にAPIの結果が返ってきます。

###発生している問題・エラーメッセージ
エラーはありません、非同期処理でAPIの結果を待つ処理を行いたです。

エラーメッセージ

###該当のソースコード
Swift3 元tableviewのcellがタップされたとき
画面遷移はstoryboard上で実装

Swift3

1// Cell が選択された場合 2 override func tableView(_ table: UITableView,didSelectRowAt indexPath: IndexPath) { 3 appDelegate.aiueo = indexPath.row 4 5 6 var apiString:String 7 apiString = (indexPath.row.description) 8 9 10 11 let url = "http://xxxxxxxxxxx.jp/API/"+apiString+".json" 12 urlString = url 13 14 //API URL check 15 print(urlString) 16 17 //#add array初期化 18 //画面遷移先で以下のArrayを使用してcell描画するために利用 19 self.appDelegate.xAR = [] 20 self.appDelegate.yAR = [] 21 22 Alamofire.request(url) 23 .responseJSON { response in 24 //print(response.result.value) // responseのresultプロパティのvalueプロパティをコンソールに出力 25 guard let object = response.result.value else { 26 return 27 } 28 var json = JSON(object) 29 // xAR,yARに値を入力して画面遷移先で描画に利用 30 for i in 0 ..< 1000{ 31 32 if(json["items"][i]["value"].string == nil) 33 { 34 //以下のログが次画面へ遷移した後にログが表示されます 35 print("-----API取得完了----",self.appDelegate.xAR) 36 break 37 } 38 else 39 { 40 self.appDelegate.xAR.append(json["items"][i]["value"].stringValue) 41 self.appDelegate.yAR.append(json["items"][i]["URL"].stringValue) 42 43 } 44 45 46 } 47 48 } 49 }

以下画面遷移先のコード

import UIKit import SwiftyJSON import Alamofire class aTableViewController: UITableViewController{ var selectedInfo : String? var urlString: String? override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = 35 } var appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate //Table Viewのセルの数を指定 override func tableView(_ table: UITableView, numberOfRowsInSection section: Int) -> Int { return self.appDelegate.xAR.count } //各セルの要素を設定する override func tableView(_ table: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //tableCell の ID (aCell)で UITableViewCell のインスタンスを生成 let cell = table.dequeueReusableCell(withIdentifier: "aCell", for: indexPath) // Tag番号100でUILabel インスタンスの生成 let aLabel = table.viewWithTag(100) as! UILabel aLabel.text = "\(self.appDelegate.xAR[indexPath.row])" return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
Swift3 Xcode8

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

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

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

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

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

fuzzball

2016/09/23 02:57

「cellが空の状態で描画されます」というのは遷移先での話でしょうか?遷移処理はどこに書いてますか?
beginer_dev

2016/09/23 02:59

連絡ありがとうございます。遷移先の話です。遷移処理はtableviewからtableviewへの書き方がコードではうまく書けなかったため。Storyboard上でe.g.pushでセル押したときに遷移するようになっています。
guest

回答1

0

ベストアンサー

APIからのデータを受信後にコードで遷移して下さい。

コードでの遷移は、

  • Storyboard上で、遷移元と遷移先をセグエで繋ぎ、Identifierを設定する。
  • コード上で、performSegueWithIdentifier()を呼んで遷移する。

という手順で行います。
分からないところは質問して下さい。

投稿2016/09/23 03:58

fuzzball

総合スコア16731

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

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

beginer_dev

2016/09/23 04:17

ありがとうございました。 storyboard設定をそのままでコード追記したら2度同じ画面を遷移して、 stoyboard上で、遷移元と遷移先をセグエで繋ぎの意味が理解できました。 セルと次の遷移先を繋げていたので2回も遷移していたと理解できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問