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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

1回答

1643閲覧

Swift 「could not find member」コンパイルエラー 助けてください

ke-ki

総合スコア11

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2015/11/14 07:22

xcode 6.3.1
AFNetworing 2.6.3
ターゲットios 8.3

iosでweb上のjsonデータを取ってきて表示するアプリを作っています。
こちらを参考にしました。が、幾つかのエラーが出てしまいました。
http://blog.livedoor.jp/sy40/archives/45087401.html
今は以下のコードの各ブロックの2行目で
could not find member 'img'
could not find member 'name'
could not find member 'description'

と出てしまっています。

//画像の表示 var imageView = cell.viewWithTag(1) as! UIImageView! let imgUrl = NSURL(string: self.items[indexPath.row].img); var err: NSError?; var imageData :NSData = NSData(contentsOfURL: imgUrl!,options:NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; var img = UIImage(data:imageData); imageView.image = img //タイトルの表示 let label = cell.viewWithTag(2) as! UILabel label.text = self.items[indexPath.row].name //説明文の表示 let description = cell.viewWithTag(3) as! UILabel description.text = self.items[indexPath.row].description

この部分が間違っているのか、それともそれ以前の部分が間違っていることで配列から取り出すことができなくなっているのかどちらか分かりません。以下に全体のview controllerのコードも載せますので、もしなにか解決方法や間違いの指摘など頂けましたら幸いです。

import UIKit

//structを使用して、jsonデータを整形
struct Items {
var name:String
var description:String
var img:String
}

class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource {

//Table Viewをsegueで @IBOutlet weak var tableView: UITableView! //jsonデータをいれる変数。 var items:[Any] = [] //required init required init(coder aDecoder: NSCoder) { self.items = [] super.init(coder: aDecoder) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.tableView.delegate = self self.tableView.dataSource = self //空の場合separatorを消す var v:UIView = UIView(frame: CGRectZero) v.backgroundColor = UIColor.clearColor() self.tableView.tableFooterView = v self.tableView.tableHeaderView = v //jsonデータ取得 requestApi() } //jsonデータ取得 func requestApi() { let manager = AFHTTPSessionManager() let url = "http://localhost/afdb.php" manager.GET(url, parameters: nil, success: { (operation, json) -> Void in let dict = json as! NSArray for arr in dict { //structで整形 var arrData = Items(name: arr["name"] as! String, description: arr["description"] as! String, img: arr["img"] as! String) //配列に追加 self.items.append(arrData) } //tableViewをリロード self.tableView.reloadData() }, failure: { (operation, error) -> Void in // エラー println(error) }) } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { //配列の個数 return self.items.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("tableCell") as! UITableViewCell if self.items.count == 0 { return cell } //画像の表示 var imageView = cell.viewWithTag(1) as! UIImageView! let imgUrl = NSURL(string: self.items[indexPath.row].img); var err: NSError?; var imageData :NSData = NSData(contentsOfURL: imgUrl!,options:NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; var img = UIImage(data:imageData); imageView.image = img //タイトルの表示 let label = cell.viewWithTag(2) as! UILabel label.text = self.items[indexPath.row].name //説明文の表示 let description = cell.viewWithTag(3) as! UILabel description.text = self.items[indexPath.row].description return cell } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

動作確認できないのですが、これでどうでしょうか?

swift

1var items:[Any] = [] 23var items:[Items] = []

この変更で他のエラーが出てしまう場合は、

swift

1self.items[indexPath.row].img 23self.(items[indexPath.row] as! Items).img

という風に、都度、型変換してやれば大丈夫かと思います。

投稿2015/11/14 07:43

編集2015/11/14 07:45
fuzzball

総合スコア16731

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

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

ke-ki

2015/11/14 07:56

ありがとうございます。無事buildすることができました。 大変ご丁寧にありがとうございました。 ですが、今度はbuildできた後にエラーが出てしまいました。 左側にthread 1と表示され、右下には。 fatal error: unexpectedly found nil while unwrapping an Optional value (lldb) と表示され、コードの func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("tableCell") as! UITableViewCell の var cell のところが緑色になり、 thread 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0) となっています。今調べています。もし、ご存知でしたら教えていただけると助かります。
fuzzball

2015/11/14 08:02

最初の質問と関係のない質問は新たに投稿された方が良いかと思いますが、とりあえず、セルのReuse Identifierが tableCell になっているかどうか確認して下さい。(これ以降はここで回答しません)
ke-ki

2015/11/14 08:33

その後 var cell:UITableViewCell = (self.tableView.dequeueReusableCellWithIdentifier("tableCell") as? UITableViewCell)! と変更したら、fatal error のメッセージが消え、(lldb)のみが表示されるようになりましたが、それ以外は変わっていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問