locked
Сохранение объектов RRS feed

  • Вопрос

  • Привет всем.

     

    TextWriter writer = null;
    IsolatedStorageFile isoStorage=IsolatedStorageFile.GetUserStoreForApplication();
    IsolatedStorageFileStream file = isoStorage.OpenFile(FILE_NAME,FileMode.Create);
    
    writer = new StreamWriter(file);
    
    XmlSerializer xs = newXmlSerializer(typeof(LoaderRename));
    
    xs.Serialize(writer, frame);
    
    writer.Close();
    
    if(writer != null)
    writer.Dispose();
    

     

    данный блок кода я хочу использовать для сохранения объектов игры.

    После перезапуска эмулятора(если не происходило повторной записи), при попытке загрузки объектов игры у меня вылетает исключение.

    Вопрос: будет-ли на реальном устройстве возникать такая же ситуация,если да,

    то в чем моя ошибка и как ее исправить. Заранее спасибо.

     

     

    9 ноября 2010 г. 10:57

Ответы

  • Если речь о том, что эмулятор был полностью закрыт и открыт заново (а не, допустим, автоматически перезапущен после изменения настроек), то это что-то вроде хард ресета. Если заливаете в эмулятор новую версию приложения, то данные в изолированном хранилище для предыдущей версии то же не созранятся.
    Во-вторых, tombstoning - это псевдомногозадачность, при которой можно сохранить состояние приложения. Перезапуск эмулятора снимет все задачи.

    • Помечено в качестве ответа Vadim_Derevich 30 ноября 2010 г. 15:05
    30 ноября 2010 г. 12:29

Все ответы

  • Покажи код загрузки и приведи полный текст исключения.
    10 ноября 2010 г. 21:11
  •  private void SaveHighScores()
      {
       string fileName = "highscore.xml";
    
       using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
       {
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileName, FileMode.CreateNew, iso))
        {
         XmlSerializer serializer = new XmlSerializer(typeof(List<HighScore>));
         serializer.Serialize(stream, highScores);
        }
       }
      }
    
    
      private void LoadHighScores()
      {
       string fileName = "highscore.xml";
       List<HighScore> newScores = new List<HighScore>();
    
       using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
       {
        using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileName, FileMode.Open, iso))
        {
         XmlSerializer serializer = new XmlSerializer(typeof(List<HighScore>));
         newScores = (List<HighScore>)serializer.Deserialize(stream);
        }
       }
      }
    
    11 ноября 2010 г. 7:51
  • Без текста ошибки непонятно где именно и что падает. Наугад - добавь проверку на существование файла в Load - if (IsolatedStorageFile.FileExists(fileName)) ...
    11 ноября 2010 г. 12:30
  • Убирая исключение получаем такую ошибку:

    "Operation not permitted on IsolatedStorageFileStream."- на

    этой строчке кода.

    IsolatedStorageFileStream file = isoStorage.OpenFile(FILE_NAME, FileMode.Open);

    если конечно не осуществлять проверку на наличие файла.

    Если эмулятор не был пере запущен то файл существует, я считываю объекты, 

    вообщем  все нормально, как только я пере запускаю эмулятор( и при запуске неосуществляется

    сохранение объекта) получаю отсутствие файла.....

    29 ноября 2010 г. 11:05
  • Так добавь проверку на существование файла. В чем собственно проблема?
    29 ноября 2010 г. 12:30
  • Проблема в том что файл после перезапуска эмулятора  отсутствует т.е

    не запись в изолированное хранилище, не тем более захоронение не позволяло сохранить

    данные игры(приложение тестировалось на эмуляторе, как

    оно себя поведет на реальном устройстве я не знаю).

     

    Вопрос: данная ситуация возникает в следствии моей ошибки или это особ

    енности эмулятора?

    30 ноября 2010 г. 6:44
  • Если речь о том, что эмулятор был полностью закрыт и открыт заново (а не, допустим, автоматически перезапущен после изменения настроек), то это что-то вроде хард ресета. Если заливаете в эмулятор новую версию приложения, то данные в изолированном хранилище для предыдущей версии то же не созранятся.
    Во-вторых, tombstoning - это псевдомногозадачность, при которой можно сохранить состояние приложения. Перезапуск эмулятора снимет все задачи.

    • Помечено в качестве ответа Vadim_Derevich 30 ноября 2010 г. 15:05
    30 ноября 2010 г. 12:29