2017-05-26 8 views
0

親クラスにグローバル配列が定義されていて、RESTサービスGETからオブジェクトを埋め込んだ配列を取得しようとしています。JSONファイルから呼び出します。 JSONファイルからオブジェクトが埋め込まれたグローバル配列が定義されており、そのデータが内部クラスtableviewcell内で使用されるという考えがあります。しかし、データがいっぱいになったことに気がつき、jsonを正しく取得すると、データが配列に入力されていますが、メソッドのすぐ外側がすべて消去されます。内部クラス内では、データは存在せず、ネットワーク要求括弧のすぐ外側にも存在します。私はその問題が何であるか想像できません。ここグローバル配列から消えているデータ

グローバルアレイとして配列の私の初期化である:ここ

class ContentDeliveryViewController: UITableViewController, UISearchBarDelegate, UISearchDisplayDelegate{ 

public var ListOfFiles: [Asset_Content] = [] 
public var ListOfTags: [String] = [] 

は、JSONを取得していることを示したブラケットの外側印刷ステートメントを含めてアレイで充填する方法であります配列は空だった。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    print("short CALLED") 
    let cell = self.tableView.dequeueReusableCell(withIdentifier: "ContentDeliveryCell", for: indexPath as IndexPath) as! ContentDeliveryCell 

    var content: AWSContent 
    //fix this 
    if(tableView == self.searchDisplayController?.searchResultsTableView){ 
     print("search part called!!") 
     content = filteredList[indexPath.row] 
    }else{ 
     content = contents![indexPath.row] 
    } 

    if(content.key.contains(IDENTIFIER)){ 
     // 
     let url = URL(string: URL) 
     let task = URLSession.shared.dataTask(with: url!){ 
      data, response, error in guard error == nil else{ 
       print(error!) 
       return 
      } 
      guard let data = data else{ 
       print("Data is empty") 
       return 
      } 
      let json = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [[String: AnyObject]] 
      var asset: Asset_Content 
      for jay in json! { 
       let category = jay["BIGCATEGORY"] as? String 
       let diagnosis = jay["DIAGNOSIS"] as? String 
       let perspective = jay["PERSPECTIVE"] as? String 
       let name = jay["NAME"] as? String 
       let title = jay["Title"] as? String 
       let UnparsedTags = jay["TAGS"] as? String 
       let filename = jay["FILENAME"] as? String 

       let tagArray = UnparsedTags?.characters.split(separator: ",") 
       for tag in tagArray!{ 
        if(self.ListOfTags.contains(String(tag))){ 

        }else{ 
         self.ListOfTags.append(String(tag)) 
         print("TAGCOUNT == ", self.ListOfTags.count) 
        } 
       } 

       asset = Asset_Content(category!, diagnosis!, perspective!, name!, title!, filename!) 
       self.loadJson(forFile: asset) 
       print("RightCount === ", self.ListOfFiles.count)// FILLED ARRAY 
      } 
      print("FirstCount === ", self.ListOfFiles.count)//FILLED ARRAY 
     } 

     task.resume() 
     cell.isHidden = true 
     print("FirstCount === ", self.ListOfFiles.count)// EMPTY ARRAY 
     print("TAGCOUNT == ", self.ListOfTags.count) // EMPTY ARRAY 
     return cell 
    }else{ 
     cell.prefix = prefix 
     cell.content = content 
     print("KEY" ,content.key) 
     cell.isHidden = false 
     return cell 
    } 
} 
+3

「cellForRowAt」はダウンロードするのに間違った場所ですrse JSON。 'dataTask'が非同期で動作するため、配列は空です。 – vadian

+0

終了後にデータを読み込む方法を教えてください。 –

答えて

0

正しい方法:オブジェクトへ

  1. 負荷データ
  2. 解析JSONを
  3. は、(例で:cell.object = ...)のセルにオブジェクトをコミットし、細胞のconfigure自体を聞かせて
  4. リロード表ビュー
関連する問題