Swift 准备未加载的序列数据

Swift 准备未加载的序列数据,swift,swift3,icarousel,Swift,Swift3,Icarousel,我有一个旋转木马,每个旋转木马项目都包含一个唯一的tableview。当您点击add按钮时,它会将您带到一个新的视图控制器,这样您就可以为tableview指定一个名称并关联要在每个单元格中显示的项目。现在,当我点击save按钮时,它将执行返回转盘的viewcontroller的顺序。我的prepareforsgue如下所示: override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let destinat

我有一个旋转木马,每个旋转木马项目都包含一个唯一的tableview。当您点击add按钮时,它会将您带到一个新的视图控制器,这样您就可以为tableview指定一个名称并关联要在每个单元格中显示的项目。现在,当我点击save按钮时,它将执行返回转盘的viewcontroller的顺序。我的
prepareforsgue
如下所示:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let destinationVC = segue.destination as! BillSplittersViewController
    let passedBill: NSManagedObject = bill as NSManagedObject

    destinationVC.allBillSplitters = getUpdatedSplitters()
    print(2)            
    print(destinationVC.allBillSplitters)
    destinationVC.billName = billName
    destinationVC.bill = passedBill
}
当显示转盘视图控制器时,它不会显示从
allBillSplitters
阵列加载的转盘中添加的项目。如果我尝试在
viewdidload
中重新加载旋转木马,
视图将出现
视图将布局子视图
没有任何更改。如果我在
viewdilayoutsubviews
中执行此操作,它确实会更新,但是您可以看到这种情况发生了,这并不好

为了调试,我试着在
prepareforsegue
中打印数组,然后在
viewdidload
中打印数组,它在
prepareforsegue
中打印数组,但在
viewdidload
中执行相同的操作,但是它用添加的项再次打印数组,但在加载的视图中看不到它

如果有帮助的话,我正在使用。我是新手,不知道发生了什么,所以我不知道该使用什么代码。我对ViewController和segue都使用故事板,segue连接到视图,而不是按钮本身。任何帮助都会很好。谢谢

更多信息:

@IBAction func saveButtonWasPressed() {

    let managedContext = bill.managedObjectContext

    if let splitter = splitter {
        splitter.mutableSetValue(forKey: "items").removeAllObjects()
        setBillSplitterValues(splitter)
        setSelectedItemsToBillSplitter(splitter)
    } else {
        let entity =  NSEntityDescription.entity(forEntityName: "BillSplitter", in: managedContext!)
        let newBillSplitter = NSManagedObject(entity: entity!, insertInto: managedContext)

        setBillSplitterValues(newBillSplitter)
        setSelectedItemsToBillSplitter(newBillSplitter)
    }

    do {
        try managedContext!.save()
    }
    catch let error as NSError {
        print("Core Data save failed: \(error)")
    }

    self.performSegue(withIdentifier: "segueToBillSplitters", sender: self)
}
正在检索新的BillSplitter:

func getUpdatedSplitters() -> [BillSplitter] {
    var allBillSplitters = [BillSplitter]()

    let managedContext = bill.managedObjectContext
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "BillSplitter")
    let predicate = NSPredicate(format: "ANY bills == %@", bill)

    fetchRequest.predicate = predicate

    do {
        let results =
            try managedContext!.fetch(fetchRequest)
        allBillSplitters = results as! [BillSplitter]
    } catch let error as NSError {
        print("Could not fetch \(error), \(error.userInfo)")
    }
    return allBillSplitters
}

我可能不太明白你到底在问什么,但我唯一的意见是,当我使用prepare for segue时,我总是使用segue标识符

 var valueToPass
 override func prepare(for segue: UIStoryboardSegue, sender: Any?){
    if (segue.identifier == "yourSegue") {
        let viewController = segue.destination as! ViewController
        viewController.passedValue = valueToPass as String
 }

在情节提要中声明标识符,同时确保您的序列是动作序列

您是否在数据发生更改的表视图上尝试了
tableView.reloadData()
?我遇到的问题不是表视图,而是它们所在的旋转木马。重新加载旋转木马是行不通的。如果你能发布其余的相关代码,那会有所帮助。通过使用GCD库将UI更新分派到主线程和/或分派主线程之外的其他工作以防止其被更新,可以很容易地修复未更新的UIblocked@MikeG抱歉,我不知道有什么能帮上忙。我补充了更多。我以前从未使用过GCD库或dispatch,所以任何提示都很好。我会一如既往地用谷歌搜索它。谢谢你的帮助。恐怕没用。谢谢
 var valueToPass
 override func prepare(for segue: UIStoryboardSegue, sender: Any?){
    if (segue.identifier == "yourSegue") {
        let viewController = segue.destination as! ViewController
        viewController.passedValue = valueToPass as String
 }