2 Replies
      Latest reply on May 18, 2018 10:34 AM by EDDY39
      EDDY39 Level 1 Level 1 (0 points)


        My question relates to segue prepare function. I'm working on an app that has a user scan in, using a barcode reader(scannerViewController). Picks item from list(InventoryTableViewController). Tells how many they are taking from inventory(ProductViewController).
        But, if user want to find item in list with the barcode scanner. Have button Unwind to  scannerViewController from InventoryTableViewController.

        Here is were my app crash and recieve the following message, "Could not cast value of type 'InventoryV2.ScannerViewController' (0x10477d038) to 'InventoryV2.ProductViewController' (0x10477cec0)."
        After reviewing my problem. I find that the problem has to do with segure prepare function


        my code:

        line 41- 46

        import UIKit
        class InventoryTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
           var inventoryItem:[String] = ["this array contains a list of products name"]
            var selectedItem:String = ""
            var inventoryImage:[UIImage] = [ imageLiteral(resourceName: "tool1"),  imageLiteral(resourceName: "tool2"),  imageLiteral(resourceName: "tool3"),  imageLiteral(resourceName: "tool4"),  imageLiteral(resourceName: "tool5"),  imageLiteral(resourceName: "tool6")]
            var selectedImage:UIImage?
            @IBOutlet weak var inventoryBar: UIView!
            override func viewDidLoad() {
                // Do any additional setup after loading the view.
            func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                return inventoryItem.count
            func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                let cell = tableView.dequeueReusableCell(withIdentifier: "item", for: indexPath) as! CustomCell
                let image = inventoryImage[indexPath.row]
                cell.productLabel.text = inventoryItem[indexPath.row]
                cell.productImage.image = image
                return cell
            func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
                selectedItem = inventoryItem[indexPath.row]
                selectedImage = inventoryImage[indexPath.row]
                self.performSegue(withIdentifier: "showItem", sender: nil)
            override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
                let info = segue.destination as! ProductViewController
                info.detailedText = selectedItem
                info.detailedImage = selectedImage
            override func didReceiveMemoryWarning() {
                // Dispose of any resources that can be recreated.

        Having trouble finding a solution to my problem.