Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-从另一个ViewController在TableView中插入项_Ios_Swift_Uitableview_Uicollectionview_Delegates - Fatal编程技术网

Ios Swift-从另一个ViewController在TableView中插入项

Ios Swift-从另一个ViewController在TableView中插入项,ios,swift,uitableview,uicollectionview,delegates,Ios,Swift,Uitableview,Uicollectionview,Delegates,我遇到了一个问题,我似乎在另一个ViewController中将项目添加到tableView中,但在演示VC时它们不会出现 我也有不同的桌面视图,这使得它有点困难: 这是在我的第一个ViewControllerA中,从这里我可以访问第二个ViewControllerB: 显示第二个ViewController效果很好。我传递的所有变量都是正确的。我唯一的问题是我无法插入一个愿望。没有错误或什么的。用户可以从第一个ViewController添加愿望: func insertWish(wishNa

我遇到了一个问题,我似乎在另一个ViewController中将项目添加到tableView中,但在演示VC时它们不会出现

我也有不同的桌面视图,这使得它有点困难:

这是在我的第一个ViewControllerA中,从这里我可以访问第二个ViewControllerB:

显示第二个ViewController效果很好。我传递的所有变量都是正确的。我唯一的问题是我无法插入一个愿望。没有错误或什么的。用户可以从第一个ViewController添加愿望:

func insertWish(wishName: String, idx: Int, currentWishlistIDX: Int, data: [[Wish]]) {
    // append the new wish to the user's currently selected wishlist
    var wishes: [Wish] = data[idx]
    wishes.append(Wish(withWishName: wishName, checked: false))
    userWishListData[currentWishlistIDX] = wishes
    // set the updated data as the data for the table view
    theTableView.wishList = userWishListData[currentWishlistIDX]
    theTableView.tableView.reloadData()
}
@objc func wishButtonTapped(){
    dismissPopUpView()
    insertWish()
}
对于整个项目,您可以看到我的git非常混乱:


我可能错过了一些非常基本的东西,但我无法理解它是什么,因此我非常感谢您的每一个帮助:

您的代码无法工作,因为您正在访问vc中的UI元素,这些元素在实例化view controller之后还没有连接

其次,强烈建议不要对数据源使用多个数组。永远不要那样做。创建一个自定义结构来保存下面代码中一个名为item的项的所有参数,并使用一个名为datasourceArray的数据源数组

然后将该项分配给vc中的临时变量wishList,并将值分配给viewDidLoad中的UI元素

此示例假定来自三个数组的值图像、标题和数据位于自定义结构的一个实例中。您必须重新设计整个数据模型。在闭包中,将项实例传递给vc

在vc中,在viewDidLoad中填充UI元素并重新加载表视图

var wishList : Item!

override func viewDidLoad()
    super.viewDidLoad()
    wishlistImage.image = wishList.image
            // set label
    wishlistLabel.text = wishList.title
            // set wishlist
    theTableView.wishList = wishList.data
    theTableView.tableView.reloadData()
}

我看了一下你的项目。对于您的问题,我没有直接的答案,但我建议将您的数据模型移动到一个管理它的类中,以降低视图控制器中的复杂性。这样做可能会使你目前的问题变得无关紧要。@PhillipMills听起来不错,但我不太清楚你的意思,我还是个新手。您可以详细说明一下吗?:我通常创建一个对象,负责在我的应用程序中的其他类之间共享的任何状态信息。视图控制器不存储该信息的副本,也不对其进行操作。相反,它们告诉数据模型对象执行插入、删除或其他操作。当需要显示数据时,会向模型对象请求数据。这样,数据只有一个真实来源,不需要同步本地控制器更新。@PhillipMills我应该使用结构或类来实现我的目的吗?好的,这将需要做很多事情:D,但如果它不起作用,我将尝试再次联系它。谢谢
cell.customWishlistTapCallback = {

        // track selected index
        self.currentWishListIDX = indexPath.item

        let vc = self.storyboard?.instantiateViewController(withIdentifier: "WishlistVC") as! WishlistViewController
        vc.wishlist = datasourceArray[indexPath.item]
        vc.currentWishListIDX = self.currentWishListIDX
        vc.userWishListData = self.userWishListData
        self.present(vc, animated: true, completion: nil)
    }
var wishList : Item!

override func viewDidLoad()
    super.viewDidLoad()
    wishlistImage.image = wishList.image
            // set label
    wishlistLabel.text = wishList.title
            // set wishlist
    theTableView.wishList = wishList.data
    theTableView.tableView.reloadData()
}