【发布时间】:2019-02-02 15:25:00
【问题描述】:
我正在尝试制作一个自定义统一编辑器,但由于某种原因,每次我关闭窗口并再次打开它时,我的列表都会重置为 null。
我试图通过将键和值分成两个单独的列表OnDisable 来保存字典中的数据,然后通过组合列表重新创建字典OnEnable。但是每次调用 OnEnable 时,我的列表中都会得到一个空值...
这是代码的示例。
public Dictionary<string, string> myDictionary = new Dictionary<string, string>();
[SerializeField]
public List<string> listOfDictionaryKeys;
private void OnEnable()
{
// this always returns null
Debug.Log(listOfDictionaryKeys.Count);
}
private void OnDisable()
{
// this successfully saves the keys to the list
listOfDictionaryKeys = (myDictionary.Keys).ToList();
}
有人知道为什么我会丢失我的列表数据吗?我没有在检查器中设置任何值,它们都是由代码设置和保存的。
【问题讨论】:
-
最好是你总是初始化像
public List<string> listOfDictionaryKeys = new List<string>();这样的列表,这是整个代码吗,因为我看不到你在OnEnable的哪个位置重新创建了列表... -
@derHugo 我在
onDisable和OnEnable中填充列表,我尝试从中获取计数以查看它是否为空并且它总是返回空。我将public List<string> listOfDictionaryKeys;更改为public static List<string> listOfDictionaryKeys = new List<string>();,现在当我关闭并打开窗口时,列表可以正常工作,但是,每当脚本重新编译时,我会再次丢失列表数据 -
我不明白你为什么只在
OnDisable中填充它? -
@derHugo 因为该列表只是尝试保存我的字典条目的一种方式,在
OnDisable我的字典被擦除为空之后,所以我试图保存我字典中的所有数据进入 2 个列表OnDisable(在键列表和一个值列表上),然后将相同数据从 2 个列表重新加载回OnEnable中的字典。但是我的列表数据也被清除了,我不知道为什么 -
你的问题不是很清楚。我猜会发生什么,但必须确切了解您的课程设置和编辑器脚本。此外,实际了解您填写该列表的方式和位置也会有很大帮助。还有你在哪里填字典?