2017-09-08 7 views
0

プロジェクトで利用可能なローカルファイルからJSONデータを解析し、これらのデータをUITableViewに読み込みたいとします。ローカルパスのJSONデータがUITableViewで正しく表示されないのはなぜですか?

マイ要件

  1. のUITableView

にJSONデータを移入URL

  • からローカルパスではないからJSONデータを解析直面している問題

    1. できません 〜へ解析されたデータを表示します(括弧はテーブルビューに表示されます)。
    2. は、私は別のコントローラにデータを渡すためのtableView

    更新されたビューコントローラにデータを印刷するダンプを()を使用して、コンソールにデータを印刷することができますができません。

    func numberOfSections(in tableView: UITableView) -> Int { 
          return 1 
         } 
    
         func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    
          return lookArrayModel.count 
         } 
         func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    
          let cells = myTableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
    
          let displayData = lookArrayModel[indexPath.row] 
    
    cells.textLabel?.text = String(describing: displayData.Lookname!) 
          cells.detailTextLabel?.text = String(describing: displayData.Lookdetails!) 
    
          // print(displayData.shadeModel) 
          return cells 
         } 
    
         func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    
    
          print("You selected cell #\(indexPath.row)!") 
    
          // Get Cell Label 
    
          let indexPath = myTableView.indexPathForSelectedRow; 
          let currentCell = myTableView.cellForRow(at: indexPath!) as UITableViewCell!; 
    
          lookNameValue = currentCell?.textLabel?.text 
    
          lookDetailValue = currentCell?.detailTextLabel?.text 
         } 
         override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    
          //let lookShade = LookModelData() 
          if (segue.identifier == "segueToLook") { 
    
        let destController:DetailsViewController = segue.destination as! DetailsViewController 
    
           //Set the selecte row index value 
           destController.LabelText = String(describing: lookNameValue) 
           destController.DetailText = String(describing: lookDetailValue) 
    
           // destController.arrayData = lookShade.shadeModel as! NSMutableArray 
    
          } 
         } 
        } 
    

    デスティネーションビューコントローラ。スウィフト

    class DetailsViewController:UIViewController,UITableViewDataSource,UITableViewDelegate { 
    
          var lookArrayModel = [LookModelData]() 
          var arrayData: NSMutableArray = [] 
    
          @IBOutlet weak var secondView: UITableView! 
          var LabelText = String() 
          var DetailText = String() 
          var shadeText = String() 
          @IBOutlet weak var LookLabel: UILabel! 
          @IBOutlet weak var LookName: UILabel! 
    
    
          override func viewDidLoad() { 
           super.viewDidLoad() 
    
           // Do any additional setup after loading the view. 
           print(arrayData) 
    
           LookName?.text = LabelText 
    
           LookLabel?.text = DetailText 
    
           secondView.dataSource = self 
           secondView.delegate = self 
           secondView.reloadData() 
          } 
          func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    
           return arrayData.count 
    
          } 
          func numberOfSections(in tableView: UITableView) -> Int { 
    
           return 1 
          } 
          func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
           let cells = secondView.dequeueReusableCell(withIdentifier: "secondCell", for: indexPath) 
    
    
           let displayData = arrayData 
    
          // cells.textLabel?.text = String(describing: (displayData as AnyObject)) 
           // print(arrayData) 
    
    
           return cells 
          } 
    
        } 
    
  • 答えて

    1

    確認してください私のコード:

    変更lookArrayModelタイプNSMutableArray[LookModelData]へ。それらのように私はいくつかの変更を行いました。チェックしてください。

    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
        var lookArrayModel = [LookModelData]() 
    
        @IBOutlet weak var myTableView: UITableView! 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         guard let Path = Bundle.main.path(forResource: "ColorShade", ofType: "json") else { return } 
    
         let url = URL(fileURLWithPath: Path) 
    
         do { 
          let data = try Data(contentsOf: url) 
          let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) 
    
          myTableView.dataSource = self 
          myTableView.delegate = self 
    
          //Calling the function for adding look 
          createLooks(dictionary: json as! NSArray) 
          myTableView.reloadData() 
         } catch { 
          print(error) 
         } 
        } 
    
        func createLooks(dictionary:NSArray) { 
         for item in dictionary { 
          let item1 = item as! NSDictionary 
          let lookModal = LookModelData() 
          lookModal.Lookname = item1.value(forKey: "Lookname") as? String 
          lookModal.LookId = item1.value(forKey: "LookId") as? String 
          lookModal.Lookdetails = item1.value(forKey: "Lookdetails") as? String 
          lookModal.shadeModel = createshade(shades: item1.value(forKey: "shades") as! NSArray) 
          lookArrayModel.append(lookModal) 
         } 
        } 
    
        func createshade(shades: NSArray) -> [ShadeDescription] { 
         var arrayShade = [ShadeDescription]() 
         for item in shades 
         { 
          let item1 = item as! NSDictionary 
          let shadeModal = ShadeDescription() 
          shadeModal.comboID = item1.value(forKey: "comboID") as? String 
          shadeModal.shadeName = item1.value(forKey: "shadeName") as? String 
          shadeModal.ShadeType = item1.value(forKey: "ShadeType") as? String 
          shadeModal.ShadeCode = item1.value(forKey: "shadeCode") as? String 
          arrayShade.append(shadeModal) 
         } 
         return arrayShade 
        } 
    
        func numberOfSections(in tableView: UITableView) -> Int { 
         return 1 
        } 
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
         return lookArrayModel.count 
        } 
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
         let cells = myTableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
    
         let displayData = lookArrayModel[indexPath.row] 
    
         // You will get like this 
         // print(displayData.LookId!) 
         // print(displayData.Lookname!) 
         // print(displayData.Lookdetails!) 
         // print(displayData.shadeModel!) 
         // This is the way to get shade model data 
         if let shadeModels = displayData.shadeModel { 
          for var shadeModel in shadeModels { 
           print(shadeModel.comboID) 
           print(shadeModel.ShadeType) 
           print(shadeModel.shadeName) 
           print(shadeModel.ShadeCode) 
          } 
         } 
         cells.textLabel?.text = String(describing: displayData.Lookname!) 
    
         return cells 
        } 
    } 
    
    class LookModelData 
    { 
        var Lookname:String? 
        var LookId:String? 
        var Lookdetails:String? 
        //Shades Array 
        var shadeModel : [ShadeDescription]? 
    } 
    
    class ShadeDescription { 
        var ShadeType:String? 
        var shadeName:String? 
        var comboID:String? 
        var ShadeCode:String? 
    } 
    
    関連する問題