- Home /
How to load list after removals?
Hello, I have a script that saves & loads a list of strings with playerprefs, but if elements is removed from the list & I press a button to save the new list, & I reload the scene again it comes back with the same list of strings including the ones that were removed. I don't know what to do about solving this issue.
public List<string> Names = new List<string>();
void Start()
{
for (int i = 0; PlayerPrefs.HasKey("SaveName" + i); i++)
{
Names.Add(PlayerPrefs.GetString("SaveName" + i));
}
}
public void Save()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString("SaveName" + i, Names[i]);
Debug.Log(Names[i].ToString());
}
}
Answer by jihadkhawaja · Jul 28, 2021 at 10:47 PM
Solution 1
public List<string> Names = new List<string>();
void Start()
{
Load();
}
public void AddName(string name)
{
Names.Add(name);
int index = listofelements.IndexOf(name);
PlayerPrefs.SetString("SaveName" + index, Names[i]);
}
public void RemoveName(string name)
{
int index = listofelements.IndexOf(name);
if(index != -1)
{
Names.Remove(name);
PlayerPrefs.DeleteKey("SaveName" + index, name);
}
}
public void ModifyName(string name, string newname)
{
int index = listofelements.IndexOf(name);
if(index != -1)
{
listofelements[index] = newname;
PlayerPrefs.SetString("SaveName" + index, newname);
}
}
public void ModifyName(int index, string newname)
{
listofelements[index] = newname;
PlayerPrefs.SetString("SaveName" + index, newname);
}
//save each time something change in the list
public void SaveAll()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString("SaveName" + i, Names[i]);
Debug.Log(Names[i].ToString());
}
}
//call each time you want to load all names from player prefs (will //replace your list
public void LoadAll()
{
Names = new List<string>();
for (int i = 0; PlayerPrefs.HasKey("SaveName" + i); i++)
{
Names.Add(PlayerPrefs.GetString("SaveName" + i));
}
}
//call each time you want to load without adding new one
public void Load()
{
for (int i = 0; PlayerPrefs.HasKey("SaveName" + i); i++)
{
if(Names.contains(PlayerPrefs.GetString("SaveName" + i)))
Names[i] = PlayerPrefs.GetString("SaveName" + i);
else
Names.Add(PlayerPrefs.GetString("SaveName" + i));
}
}
Solution 2
public List<string> Names = new List<string>();
void Start()
{
Load();
}
//save each time something change in the list
public void Save()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString("SaveName" + i, Names[i]);
Debug.Log(Names[i].ToString());
}
}
//call each time you want to load
public void Load()
{
Names = new List<string>();
for (int i = 0; PlayerPrefs.HasKey("SaveName" + i); i++)
{
Names.Add(PlayerPrefs.GetString("SaveName" + i));
}
}
Thanks for your answer but for some reason it doesn't seem to work. I tried it on another script & it worked but the button the script is attached to the list remains the same every time I load. idk what's causing this.
Solution 1 Worked thank you for your expertise.
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
Set int to object from list? 0 Answers
How i can PlayerPrefs List<>? 0 Answers
Save and Load Function 2 Answers