2017-07-01 97 views
0

我想显示一个表视图中的所有项目名称的列表,但是我的tableview是空的并且什么也没有显示。我将TableView从Storyboard拖到ProjectViewController类的tableView IBOutlet中。我最终希望从服务器请求数据,但我使用虚拟数据,直到可以使视图正常工作。我正在使用swift 3和xcode。Swift TableView不显示任何数据

class ProjectViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    // MARK: Properties 
    @IBOutlet weak var tableView: UITableView! 

    let projectsJson = [ 
     "projects" : [ 
      [ 
       "id": "1", 
       "name": "Molestiae labore qui ut quam aut provident.", 
       "summary": "Ut rerum quia similique perferendis reiciendis officiis. Id aliquid  possimus sunt suscipit.", 
       "executive_summary": "Eius ipsa quia enim enim suscipit. Iste dolor ea dolore occaecati ducimus deserunt. Vero fugit omnis dolorem. Perspiciatis quas et commodi aliquam labore consequuntur est eaque.", 
       "system_scope": "Est eos deleniti perspiciatis cupiditate numquam saepe ut. Laborum consequuntur ullam aperiam magnam. Aliquam nisi ut quia. Consequatur aut molestias vero debitis. Autem id harum asperiores neque sit iusto soluta.", 
       "proposed_project": "Ut dolores officiis sit ut corporis consequatur. Aliquam enim sapiente fugit aut aspernatur modi qui molestias. Atque aspernatur optio qui temporibus repudiandae. Voluptas libero beatae soluta vel distinctio accusantium. Qui ducimus placeat ut nam dignissimos ut." 
      ], 
      [ 
       "id": "2", 
       "name": "Repellat voluptatem ut laboriosam officiis quo error ut.", 
       "summary": "Ducimus quo esse consequatur sequi suscipit et. Velit maiores maxime ut distinctio. Assumenda et corrupti tempora accusamus dolores et fugiat. Incidunt sapiente nam est eum rerum error. Molestiae velit neque omnis aliquid qui.", 
       "executive_summary": "Praesentium quae perferendis ipsam sapiente earum. Voluptates accusantium consequatur voluptatum.", 
       "system_scope": "Eaque sint quis id doloremque voluptas. Mollitia hic velit et et. Id et qui eum non.", 
       "proposed_project": "Qui qui est sed quod ut vel et. Omnis placeat ea sint alias rerum rerum a aut. Et necessitatibus incidunt incidunt aspernatur est magni. Et non vitae non incidunt nam odio." 
      ], 
      [ 
       "id": "3", 
       "name": "Saepe reiciendis excepturi est sequi.", 
       "summary": "Asperiores rerum laboriosam asperiores aut rerum in dolor. Qui quia et aperiam laborum animi quia.", 
       "executive_summary": "Aut vero non id nulla voluptatum dignissimos alias. Deserunt sint rem laboriosam consequuntur. Illum molestiae ipsum inventore explicabo.", 
       "system_scope": "Praesentium numquam aut eveniet neque. Et sed repellat distinctio dolorem. Sit ex doloremque nisi ipsam ullam ut rem. Error molestias consectetur omnis quaerat consequatur sed et.", 
       "proposed_project": "Veniam expedita rerum voluptas accusantium laudantium aut. Reiciendis architecto optio labore iste rem et. Fuga quasi et et omnis molestias." 
      ], 
      [ 
       "id": "4", 
       "name": "Sint provident et aperiam et.", 
       "summary": "Enim eum amet aspernatur. Et cumque qui nisi. Amet distinctio et ut aut perferendis ea vel. Velit quas nesciunt et quaerat ea ullam culpa. Dolores qui est aut quis est.", 
       "executive_summary": "Omnis et at exercitationem consequatur quaerat. Sed eligendi modi quibusdam et quo. Nesciunt perferendis officiis modi consequatur. Quas id rerum earum rerum rerum harum.", 
       "system_scope": "Incidunt ut necessitatibus animi. Id adipisci culpa sed est ut quam asperiores cupiditate. Ut incidunt aperiam libero voluptatem.", 
       "proposed_project": "Velit quis est vitae nam et delectus pariatur. Deleniti odio nihil quo libero dolorum. Fugiat iusto in dignissimos quisquam enim doloribus illo. Sint suscipit ducimus et totam doloremque optio enim." 
      ], 
      [ 
       "id": "5", 
       "name": "Animi velit itaque eligendi est.", 
       "summary": "Consequatur ea laudantium dicta non asperiores qui sapiente. Est dolor laboriosam nostrum a cupiditate. Ratione nemo eaque ut sit velit.", 
       "executive_summary": "Ullam ex animi asperiores in laboriosam rem. Repellendus et amet minus voluptas illum. Voluptatem nisi officia accusantium et eum.", 
       "system_scope": "Corrupti est ad earum dolorum quo. Blanditiis debitis dolorum maxime voluptatum quisquam vitae. Similique repellendus rerum aspernatur sint officiis. Suscipit qui eius autem qui saepe in ut et.", 
       "proposed_project": "Aut velit a illo nostrum iure temporibus vel. Eos est dignissimos distinctio dignissimos voluptas. Sit tenetur error accusantium voluptatum recusandae aut. Assumenda quod quo sint sed debitis eum." 
      ] 
     ] 
    ] 

    var projects : [Project] = [] 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return projects.count; 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "ProjectCell") 

     let project = projects[indexPath.row] 

     cell.textLabel?.text = project.name 

     return cell 
    } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     print("You selected cell #\(indexPath.row)!") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     projects = ProjectWrapper.projectArrayFromJSON(json: projectsJson) 

     DispatchQueue.main.async { 
      self.tableView.reloadData() 
     } 
    } 

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


    /* 
    // MARK: - Navigation 

    // In a storyboard-based application, you will often want to do a little preparation before navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     // Get the new view controller using segue.destinationViewController. 
     // Pass the selected object to the new view controller. 
    } 
    */ 

} 

工程类

class Project{ 
    let name: String 
    let id: Int 
    let summary: String 
    let executiveSummary: String 
    let systemScope: String 
    let proposedProject: String 

    public init?(name: String, id: Int, summary: String, executiveSummary: String, systemScope: String, proposedProject: String) { 
     self.name = name 
     self.id = id 
     self.summary = summary 
     self.executiveSummary = executiveSummary 
     self.systemScope = systemScope 
     self.proposedProject = proposedProject 
    } 

    func getName() -> String { 
     return name; 
    } 

    func getId() -> Int { 
     return id; 
    } 

    func getSummary() -> String{ 
     return summary 
    } 

    func getExecutiveSummary() -> String{ 
     return executiveSummary 
    } 

    func getSystemScope() -> String{ 
     return systemScope 
    } 

    func getProposedProject() -> String{ 
     return proposedProject 
    } 

    func getUrlExtension() -> String{ 
     return "project/" + String(id) 
    } 
} 

class ProjectWrapper{ 
    static func projectArrayFromJSON(json: [String : Any]) -> [Project]{ 
     let jsonProjects = json["projects"] as! [[String: String]] 
     var projects: [Project] = [] 

     for project in jsonProjects{ 
      let thisProject = Project(name: project["name"]!, id: Int(project["id"]!)!, summary: project["summary"]!, executiveSummary: project["executive_summary"]!, systemScope: project["system_scope"]!, proposedProject: project["proposed_project"]!) 
      projects.append(thisProject!) 
     } 

     return projects 
    } 
} 

感谢您的任何意见

+0

'self.tableView.delegate = self' is missing –

回答

1

你设置了tableview中的数据源和委托?如果没有,你可以指定数据源,通过将出口的观点:

enter image description here

和数据源插座拖动到您的视图控制器

在viewDidLoad中把self.tableView.delegate = self()将实现同样的事情,编程。

+0

非常感谢你的工作! –