- Home /
Question by
programming123 · Oct 26, 2012 at 04:30 PM ·
iossaveloadxml
the XML file doesn't work when i install the app from the app store
Hello All
i have a problem with the XML file , the build work fine when i make the build directly to my iPad or iPhone it read and write correctly , but when i install the app from the app store the XML file doesn't work correctly , doesn't save any data .
this is the class of the saving loading XML file .
using UnityEngine;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
using System.Text;
public class _GameSaveLoad: MonoBehaviour {
// An example where the encoding can be found is at
// http://www.eggheadcafe.com/articles/system.xml.xmlserialization.asp
// We will just use the KISS method and cheat a little and use
// the examples from the web page since they are fully described
// This is our local private members
Rect _Save, _Load, _SaveMSG, _LoadMSG;
bool _ShouldSave, _ShouldLoad,_SwitchSave,_SwitchLoad;
string _FileLocation,_FileName;
public GameObject _Player;
UserData myData;
string _PlayerName;
string _data;
// bool [] yy = new bool[6];
Vector3 VPosition;
// When the EGO is instansiated the Start will trigger
// so we setup our initial values for our local members
void Start () {
// We setup our rectangles for our messages
// _Save=new Rect(10,80,100,20);
// _Load=new Rect(10,100,100,20);
// _SaveMSG=new Rect(10,120,400,40);
// _LoadMSG=new Rect(10,140,400,40);
// Where we want to save and load to and from
_FileLocation=Application.persistentDataPath;
_FileName="SaveData2.xml";
// for now, lets just set the name to Joe Schmoe
_PlayerName = "player1";
// we need soemthing to store the information into
myData=new UserData();
// if(Application.loadedLevelName=="mainMenu")
// load();
// if(Application.loadedLevelName=="result")
// save();
//load();
}
void Update () {}
//***************************************************
// Loading The Player...
// **************************************************
public void load(){
// Load our UserData into myData
Start ();
LoadXML();
if(_data.ToString() != "")
{
// notice how I use a reference to type (UserData) here, you need this
// so that the returned object is converted into the correct type
myData = (UserData)DeserializeObject(_data);
// set the players position to the data we loaded
cowBoy.isWin=myData._iUser.completedLevels;
mainMenu.fastTimesList=myData._iUser.fastTimes;
// VPosition=new Vector3(myData._iUser.x,myData._iUser.y,myData._iUser.z);
// _Player.transform.position=VPosition;
// just a way to show that we loaded in ok
// Debug.Log(myData._iUser.name);
for(int i=0;i<cowBoy.isWin.Length;i++){
if(cowBoy.isWin[i]==true)
{
GameObject.Find("level"+i.ToString()).GetComponent<MeshRenderer>().enabled=true;
}
}
}
}
//***************************************************
// Saving The Player...
// **************************************************
public void save(){
Start ();
// myData._iUser.x=_Player.transform.position.x;
// myData._iUser.y=_Player.transform.position.y;
// myData._iUser.z=_Player.transform.position.z;
// myData._iUser.name=_PlayerName;
myData._iUser.completedLevels=cowBoy.isWin;
myData._iUser.fastTimes=result.fastTimesList;
// Time to creat our XML!
_data = SerializeObject(myData);
// This is the final resulting XML from the serialization process
CreateXML();
Debug.Log(_data);
}
/* The following metods came from the referenced URL */
string UTF8ByteArrayToString(byte[] characters)
{
UTF8Encoding encoding = new UTF8Encoding();
string constructedString = encoding.GetString(characters);
return (constructedString);
}
byte[] StringToUTF8ByteArray(string pXmlString)
{
UTF8Encoding encoding = new UTF8Encoding();
byte[] byteArray = encoding.GetBytes(pXmlString);
return byteArray;
}
// Here we serialize our UserData object of myData
string SerializeObject(object pObject)
{
string XmlizedString = null;
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(UserData));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
xs.Serialize(xmlTextWriter, pObject);
memoryStream = (MemoryStream)xmlTextWriter.BaseStream;
XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray());
return XmlizedString;
}
// Here we deserialize it back into its original form
object DeserializeObject(string pXmlizedString)
{
XmlSerializer xs = new XmlSerializer(typeof(UserData));
MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(pXmlizedString));
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8);
return xs.Deserialize(memoryStream);
}
// Finally our save and load methods for the file itself
void CreateXML()
{
StreamWriter writer;
FileInfo t = new FileInfo(_FileLocation+"\\"+ _FileName);
if(!t.Exists)
{
writer = t.CreateText();
}
else
{
t.Delete();
writer = t.CreateText();
}
writer.Write(_data);
writer.Close();
Debug.Log("File written.");
}
void LoadXML()
{
StreamReader r = File.OpenText(_FileLocation+"\\"+ _FileName);
string _info = r.ReadToEnd();
r.Close();
_data=_info;
Debug.Log("File Read");
}
}
// UserData is our custom class that holds our defined objects we want to store in XML format
public class UserData
{
// We have to define a default instance of the structure
public DemoData _iUser;
// Default constructor doesn't really do anything at the moment
public UserData() { }
// Anything we want to store in the XML file, we define it here
public struct DemoData
{
public bool[] completedLevels ;
public float[] fastTimes ;
}
}
thanks in advance .
Comment
Your answer
Follow this Question
Related Questions
Lowest common denominator of saving game information 0 Answers
Save and Load data from Local XML file won't work 1 Answer
How do I read XML on iOS? 2 Answers
Saving and Loading XML in Standalone 1 Answer
load info from XML file 1 Answer