Reputation: 33
I have looked around for a good example of how to pass an array created and populated in 1 view conroller and pass it to another through a modal segue.
Here is my storyboard
The user clicks the history button and it pops open the modal table view controller. The table view is then populated with the contents of an array send or passed from the original view.
When I print the contents of the array in the Destination View Controller its empty. So i think there is a problem with how its getting initialized.
Here is my code so far
This is the 1st UIView controller
//UIPickerView BarButtonItem done button actions here
func donePicker() {
txtHeight.resignFirstResponder()
var feet = Int(item1.componentsSeparatedByString(" ")[0])!
let inches = Int(item2.componentsSeparatedByString(" ")[0])!
feet *= 12
let totalInches = feet + inches
totalHeightValues.append(totalInches)
print(totalHeightValues)
txtHeight.text = ""
let alertController = UIAlertController(title: "\(feet / 12) ft" + " " + "\(inches) in", message: "Entry Sucessfully Added", preferredStyle: UIAlertControllerStyle.Alert)
alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default,handler: nil))
self.presentViewController(alertController, animated: true, completion: nil)
}
//UIPickerView BarButtonItem cancel button actions here
func cancelPicker() {
txtHeight.text = ""
txtHeight.resignFirstResponder()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "showHistory") {
let dVC = (segue.destinationViewController as! HistoryTableViewController)
dVC.totalHeightValuesDest = totalHeightValues
}
}
Here is the Destination or 2nd tableviewcontroller
import UIKit
class HistoryTableViewController: UITableViewController {
@IBAction func btnExit(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
var totalHeightValuesDest: [Int] = []
override func viewDidLoad() {
super.viewDidLoad()
print(totalHeightValuesDest)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return totalHeightValuesDest.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel?.text = "\(totalHeightValuesDest[indexPath.row])"
return cell
}
Upvotes: 2
Views: 5854
Reputation: 64
prepareForSeque
assign the property to the array you currently have.In step #2, after dVC.totalHeightValuesDest = totalHeightValues
, add the following:
dVC.myNewArrayProperty = myCurrentArrayOfHistoryObjects
. Obviously, you'll substitute the property name you created in the HistoryViewController and the current myCurrentArrayOfHistoryObjects with the name of the local array variable you have.
Make sure to cast the destinationViewController correctly (UINavigationController first, then call topViewController to get to your HistoryViewController).
Upvotes: 3
Reputation: 192
Change
dVC.totalHeightValuesDest = totalHeightValues
to
dVC.totalHeightValuesDest = self.totalHeightValues
Upvotes: -1