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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

361閲覧

swiftでjsonデータをパースし、テーブルビューに表示するプログラムについて

退会済みユーザー

退会済みユーザー

総合スコア0

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2017/05/28 05:55

現在、swiftでphpファイルから送られてきたjsonデータをパースして、
tableviewに表示するプログラムの作成を試みております。

jsonデータをパースするところまでは何とかたどり着いたのですが、
それをtableviewに反映させるやり方が分かりかねております。

今は// Cellで表示する配列以下の名前のリストがテーブルビューに
表示されておりますが、実現したいこととしては、
パースしたjsonデータがテーブルビューに
表示されるようにしたいと考えております。

大変不勉強な中でのご質問となり恐縮でございますが、
本来ならここで変数を設定しないと駄目ですとか、ご教示を頂けますと幸いです。よろしくお願い致します。

import UIKit class sampleview:UIViewController,NSURLSessionDelegate,NSURLSessionDataDelegate,UITableViewDataSource, UITableViewDelegate{ // Sectionで表示する配列 private let mySection: NSArray = ["トピックタイトル"] @IBOutlet weak var try1: UITableView! override func viewDidLoad() { //code super.viewDidLoad() try1.dataSource = self try1.delegate = self jsontry() } // Cellで表示する配列 private let myManItems: NSArray = ["太郎", "哲也", "一郎", "宗一郎", "智","太郎", "哲也", "一郎", "宗一郎", "智"] // Sectionの数を返す func numberOfSectionsInTableView(tableView: UITableView) -> Int { return mySection.count } // Sectionの内容を返す func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return mySection[section] as? String } // Cellに表示する数を返す func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 0 { return myManItems.count }else { return 0 } } // Cellの内容を返す func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("MyCell", forIndexPath: indexPath) if indexPath.section == 0{ cell.textLabel?.text = "\(myManItems[indexPath.row])" } return cell } func jsontry(){ // 通信用のConfigを生成. let myConfig:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() // Sessionを生成. let mySession:NSURLSession = NSURLSession(configuration: myConfig, delegate: self, delegateQueue: nil) // 通信先のURLを生成. let myUrl:NSURL = NSURL(string: "http://localhost/book/jsonDB.php")! // タスクの生成. let myTask:NSURLSessionDataTask = mySession.dataTaskWithURL(myUrl, completionHandler: { (data, response, err) -> Void in do{ // 受け取ったJSONデータをパースする. let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray // パースしたJSONデータへのアクセス. var number = 0 let jsoncont = json as! NSArray print(jsoncont) for value in json{ let username = value["user_name"] as! NSString print(username) number = number+1 } }catch{} }) self.try1.reloadData() myTask .resume() } }

php側のファイルとしては、データベースから情報をセレクトして、
while構文を使って、以下のような形で設定しております。

while($data = データベースセレクト構文 -> fetch_array()){ $age = $age + 1; $user_name = $data['user_name']; $senddata []= array( 'user_name'=>$data['user_name'], 'user_age'=>$age ); }

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

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

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

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

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

guest

回答1

0

ベストアンサー

myManItemsに名前の配列が入ればいいのですから、パースしたjsonから名前の配列を生成してセットしてあげればいいのではないでしょうか。

こんな感じです。

Swift

1// 略 2 // Cellで表示する配列 3 private var myManItems: [String] = [String]() 4// 略 5 func jsontry(){ 6// 略 7 // 受け取ったJSONデータをパースする. 8 let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray 9 10 // パースしたJSONデータへのアクセス. 11 var number = 0 12 let jsoncont = json as! NSArray 13 print(jsoncont) 14 15 // Cellで表示する配列を作成 16 var manItems = [String]() 17 for value in json{ 18 let username = value["user_name"] as! String 19 print(username) 20 number = number+1 21 manItems.append(username) 22 } 23 24 // NSURLSessionのdelegateQueueにnilを渡したのでcompletionHandlerはバックグラウウンドスレッドで実行されていると思う 25 // UIKitはメインスレッドで操作 26 dispatch_async(dispatch_get_main_queue()) { 27 self.myManItems = manItems 28 self.try1.reloadData() 29 } 30// 略 31 } 32

投稿2017/05/31 06:10

u39ueda

総合スコア950

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

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

退会済みユーザー

退会済みユーザー

2017/06/04 01:57

ご返信遅れ申し訳ございません。 ご教示いただきありがとうございます、無事動きました! 引き続きよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問