2016-09-07 14 views
1

Swift 2では、UITableViewに取り組み、辞書の内容に基づいてセルを動的に作成します。辞書には38のエントリがあります。 Attributes InspectorでTable View Sectionを手動で38行に設定すると、すべてが期待通りに機能します。numberOfRowsInSectionは属性インスペクタをオーバーライドしません

しかし、これは理想的ではなく、むしろnumberOfRowsInSectionを使用して辞書のカウントを取得し、そのように行/セルを作成します。 Att Inspectorが1に設定されていると、範囲外のエラーが発生します。ここで

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]' 

私のコードです:

import SwiftyJSON 
import UIKit 

class OurTableViewController2: UITableViewController { 


    @IBOutlet weak var menuButton: UIBarButtonItem! 

    var labels = [String: UILabel]() 
    var strings = [String]() 
    var objects = [[String: String]]() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.dataSource = self 
     tableView.delegate = self 

     self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell") 

     //gets data that will be used for cells 
     let urlString = "http://handheldart.org/api/tags/" 
     if let url = NSURL(string: urlString) { 
      if let data = try? NSData(contentsOfURL: url, options: []) { 
       let json = JSON(data: data) 
       parseJSON(json) 
      } 
     } 

     //menu button at top left of screen 
     if self.revealViewController() != nil { 
      menuButton.target = self.revealViewController() 
      menuButton.action = "revealToggle:" 
      self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
     } 

    } 

    //creates array 'objects' 
    func parseJSON(json: JSON) { 
     for result in json.arrayValue { 
      let id = result["id"].stringValue 
      let tagURL = result["url"].stringValue 
      let tagName = result["name"].stringValue 
      let obj = ["id": id, "tagURL": tagURL, "tagName": tagName] 
      //print (tagName) 
      objects.append(obj) 
     } 

     tableView.reloadData() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 

    //create number of rows based on count of objects array 
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     print ("OBJECTS COUNT") 
     print (objects.count) //prints 38 
     return objects.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell 

     let object = objects[indexPath.row] 

     cell.textLabel?.text = object["tagName"]! 

     return cell 
    } 

任意の提案?

+0

をあなたは、なぜあなたが行数を設定しようとしているUITableViewDelegateとUITableViewDataSource – WMios

+0

に適合していない - あなたはテーブルビューは、インスペクタ属性からそれを行うことができます。あなたのデータがすべてダイナミックであればあなたのストーリーボードに入れますか? – Wain

+0

私はもともとデザインをテストするためにそこにセルを作成しましたが、今は遡ってストーリーボードから離れています。 – pruette

答えて

1

これは、テーブルビューのコンテンツプロパティを「静的セル」としてマークしたためです。あなたのテーブルビューのコンテンツを "ダイナミックプロトタイプ"として設定する必要があります。 >コンテンツ 『「最初のプロパティで動的プロトタイプ』を選択してください

enter image description here

関連する問題