第二个VC中的结构数组未从第一个VC

时间:2017-11-10 09:11:51

标签: ios arrays swift struct

我创建了一个结构并创建了该类型的数组。结构由两个变量组成:

struct notesarray
{
    var prioritycolor : UIColor
    var note : String
}

在我的第二个包含collectionViewController的VC中,我创建了一个类型为notesarray的数组。我正在发送prioritycolor的值和来自firstVC的注释。

我将在稍后设置CoreData,现在我只想让它以最简单的方式工作。我将firstVC中的数据附加到此数组中,如下所示:

@objc func handleCheckButton()
{
    print("Added")
    let secondVC = AddedNotesCollectionViewController()

    secondVC.allnotes.append(notesarray(prioritycolor: taskTextView.backgroundColor!, note: taskTextView.text))
    print(secondVC.allnotes.count)

    taskTextView.text = nil

}

allnotes是在secondVC中找到的数组的名称。

出于测试目的,我正在打印secondVC.allnotes.count,但我刚刚开始#1;'在控制台中,无论我向阵列添加多少元素。 我还通过在print(allnotes.count) func下放置viewDidAppear来测试这个,这样每当我进入secondVC时,它会给我数组中的元素,但它也会显示' 0' 0每次。

我不知道我在这里做错了什么。请帮我!

1 个答案:

答案 0 :(得分:1)

这是因为每次按下按钮都会得到AddedNotesCollectionViewController的新实例。

let secondVC = AddedNotesCollectionViewController()

使用空数组启动新实例,并通过调用

向其中添加一个元素
secondVC.allnotes.append(notesarray(prioritycolor: taskTextView.backgroundColor!, note: taskTextView.text))

因此,计数总是一个。 iOS是正确的,我的朋友:))

您需要什么:

如果已经通过将第二个VC推入FirstVC的导航堆栈来加载第二个VC,或者如果已经呈现它,则获得对所呈现/推送的VC的引用,而不是每次都创建一个新VC。 SO中有很多答案解释了如何访问推送/模态显示的VC:)

如果您要提交/推送SecondVC,正如您在评论中提到的那样,您始终可以使用prepareForSegue来传递数据。

如果您的AddedNotesCollectionViewController永远不会出现,请考虑创建singleton instance notesArray您将在多个VC之间共享的$query ="SELECT * FROM gic_user_preference order by preference_id, sub_preference_id"; $result_preferencea = mysqli_query($createCon->connect(), $query); $groupedData = []; while ($result_preference2 = mysqli_fetch_assoc($result_preferencea)) { $prefId = $result_preference2["preference_id"]; $subPrefId = $result_preference2["sub_preference_id"]; if(!isset($groupedData[$prefId])) $groupedData[$prefId] = []; $groupedData[$prefId][$subPrefId] = $result_preference2; }

希望有所帮助