Search code examples
iosswiftuitableviewplist

Passing data between table views using plist


How do I pass data between two table views? I have poet.plist with 2 arrays: name and biography. When I run the app, second table view is empty. The first table view should list poets while the second table view lists works of poets.

First class

class Poets
{
    var poetName:String = ""
    var poetImage:String = ""
    var books=[Works]()
}

Second Class:

class Works {

    var nameWork = ""
    var workPoet = ""

    init(nameWork: String, workPoet: String) {
        self.nameWork = nameWork
        self.workPoet = workPoet
    }
}

First View Controller

let worksArray = booksDict[poet.poetName as String] as! NSArray
for work in worksArray {
    let dictionaryFromArray = work as! NSDictionary
    let workObject = Works(nameWork: dictionaryFromArray["nameWork"] as! String, workPoet: dictionaryFromArray["work"] as! String)
    poet.books.append(workObject)
}

How can I make a segue between the UITableViewController with names of poets and the UITableViewController with works of poets?


Solution

  • In 1st View Controller

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    
        // ShowPoetWorks is your segue identifier which you can set in storyboard
        if segue.identifier == "ShowPoetWorks" {
    
            var secondVC = segue.destinationViewController as? SecondViewController
            secondVC.poetName = poetName
        }
    }
    

    In 2nd View Controller

    • Define 2 field: poetName and workCount
    • Override function `tableView:numberOfRowsInSection

      override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      
          return workCount  
      }
      
    • In viewDidLoad, load poet works base on poetName and call tableView.reloadData()