There are many possibilities to save/load data, but
For your case, i think that you can use PlayerPref, it’s the easiest way to save Data, but it’s limited.
I Suggest you to save a prefab like EmptyContact (which contain the default contact image, the text for example MyName, … (common to all contacts) ) and then, when you clone them, a script attached to this prefab will load the data saved by using PlayerPref.
I’ve created an application (personnal project too) and i had the EXACT same problem
You need to save, (for example before application exit), the number of contact there is. For example,
GameObject ContactList = GameObject.FindGameObjectsWithTag("Contact");
int AmountOfContact = ContactList.lenght;
I’ve created a script that is on each contact clone, for example, ContactData.cs
Start the script by writing this :
public Text ContactCloneTitle;
public Text ContactClonePhoneNumber;
public Image ContactCloneImg;
As you can see, Text/image are NOT static, because EACH contact has his own Data.
Then, when your game start, just Load the data that we will define bellow.
To save the Data, use PlayerPref. Name your Pref for example “ContactCloneTitle”+IndexOfThisContact to have always a name different depending of the different clone.
Then , when you load the data, just use :
ContactCloneName.text = PlayerPref.GetString("Contact"+IndexOfThisContact+"Name");
ContactClonePhoneNumber.text = ...
Of course, this code is just an example. If your number of Contact is too high, this solution isn’t the best, but this worked for me.