2016-07-25 10 views
2

xcode 7.3.1のswift 2.2のtableViewで作業しています。私がtableViewを扱うのは初めてではないので、私のコードからは確信しています。データをサーバーから正しくプルして配列に格納していますが、テーブルビューに関連する2つの関数が呼び出されていないので、テーブルビューが空に見えます。私はセルとリンクされたテーブルビューをビューからレイアウトからも追加しました。テーブルビューでデータが表示されない2

どこが問題かわかりません。

class studentTeacherList: UIViewController , UITableViewDataSource,UITableViewDelegate { 

@IBOutlet weak var studentParentTable: UITableView! 


@IBOutlet weak var loadIndicator: UIActivityIndicatorView! 




var username:String! 
var fromSender: String? 
var toRec: String? 

var student_id = [Int]() 
var parent_id = [String]() 
var student_names = [String]() 
var parent_name = [String]() 



//Sent Data 
var s_id:Int = 0 
var s_name = "" 
var p_id = "" 
var p_name = "" 


override func viewDidLoad() { 
    super.viewDidLoad() 
    studentParentTable.delegate = self 
    studentParentTable.dataSource = self 


    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults() 
    username = prefs.objectForKey("user")as! String 
    fromSender = prefs.objectForKey("Sender")as! String 
    toRec = prefs.objectForKey("Receiver")as! String 


    self.loadIndicator.startAnimating() 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 

     self.loadList() 
     //self.studentParentTable.reloadData() 


     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.loadIndicator.stopAnimating() 
     }) 
    }); 


    studentParentTable.reloadData() 

} 




func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return student_names.count 
} 


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    //This method to define each cell at Table View 
    let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell") 


    cell.textLabel?.text = student_names[indexPath.row] 
    cell.detailTextLabel?.text = parent_name[indexPath.row] 

    return cell 
} 




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

@IBAction func backButton(sender: AnyObject) { 
    self.dismissViewControllerAnimated(true, completion: nil) 

} 



func loadList() 
{ 
    var normallink = "mylinkhere" 
    normallink = normallink + "?teacherid=" + self.username 



    var studentParentURL:NSURL = NSURL (string: normallink)! 
    let data = NSData(contentsOfURL: studentParentURL)! 



    do { 
     let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) 

     if let alldata = json["data"] as? [[String: AnyObject]] { 
      for onedata in alldata { 
       if let stu_id = onedata["id"] as? Int { 
        student_id.append(stu_id) 
       } 
       if let stu_name = onedata["studentName"] as? String { 
        student_names.append(stu_name) 
       } 
       if let par_id = onedata["parentId"] as? String { 
        parent_id.append(par_id) 
       } 
       if let par_name = onedata["parentName"] as? String { 
        parent_name.append(par_name) 
       } 



      } 
     } 
    } catch { 
     print("Error Serializing JSON: \(error)") 
    } 




    print(student_names.count) 

} 


    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 


    s_id = student_id[indexPath.row] 
    s_name = student_names[indexPath.row] 
    p_id = parent_id[indexPath.row] 
    p_name = parent_name[indexPath.row] 
} 
} 
+3

「self.loadIndicator.stopAnimating()」の後にreloadData()を移動してみてください – WMios

+0

@WMiosはい、ありがとうございます。 –

+0

@WMios @WMiosテーブルビューの各行はインデックス –

答えて

1

あなたはこの呼び出しの後にリロードされていないように見えます:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 

     self.loadList() 
     //self.studentParentTable.reloadData() 


     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.loadIndicator.stopAnimating() 
     }) 
    }); 

ですから、self.loadIndicator.stopAnimating()studentParentTable.reloadData()を追加する必要があります。

関連する問題