2013-10-02 1 views
1

Недавно у меня возникла большая проблема с pugiXml (используется в движке cocos2d-x).Сохранение xml-файла на iOS (pugiXml и Cocos2d-x)

Вскоре, я сделал викторину (в упомянутом Cocos2d-x). Я сохраняю свои вопросы (и некоторые другие данные) в файле Xml. В новой игре они разбираются и вставляются в словари. Если на вопрос дан ответ, короткая строка, указывающая ответ (будь то хорошая или нет - Y/N), вставляется в этот файл Xml (ниже этого конкретного вопроса). Позже я использую эти данные для отображения статистики (я считаю процент вопросов с хорошими ответами - это подсчет количества Y, разделенного на количество вопросов, умноженное на 100).

Я использую:

CCFileUtils::sharedFileUtils()->fullPathForFilename(o_QA); 

, чтобы получить файл, а затем

pBuffer = CCFileUtils::sharedFileUtils()->getFileData(fullPath.c_str(), "rb", &bufferSize); 

поместить файл в буфер и

pugi::xml_parse_result result = doc.load_buffer(pBuffer,bufferSize); 

для анализа данных и начать работать на нем.

Наконец, я сохраняю файл с:

doc.save_file(fullPath.c_str()); 

Android:

  • Это работает очень хорошо, хотя я должен был скопировать файл с вопросами к/данные/данные/приложение/Files /. Тем не менее, он сохраняет изменения на многих устройствах.

IOS:

  • К сожалению, на прошивке это не работает. Данные загружаются и анализируются (что означает, что я действительно могу играть в игру), но они не сохраняются. Я попытался переместить файлы в другие папки (начиная с «Ресурсы/документы», затем с главной папки «Ресурсы», «Ресурсы/Библиотека/Поддержка приложений»). Он все еще не сохраняет данные, и я не знаю, что делать. В результате моя статистика не считается хорошо (неважно, как вы отвечаете на вопросы - все они ложны, потому что файл Xml не обновляется).

Неужели кто-нибудь сталкивался с подобной проблемой? Можете ли вы, пожалуйста, помочь мне?

+0

Как вы получаете каталог документов? Проверьте это: http://stackoverflow.com/questions/6907381/what-is-the-documents-directory-nsdocumentdirectory – LearnCocos2D

+0

Я делаю это с помощью метода _fullPathForFilename_ (o_QA - это строка). Я попытался использовать значения o_QA, такие как «Documents/Questions.xml» (создала папку «Документы» в разделе «Ресурсы»), «Вопросы.xml» (папка «Вопросы.xml в ресурсах») или «Libary/Application Support/Questions.xml» (созданная библиотека/Структура папок поддержки приложений в папке Ресурсы). Я ошибаюсь и должен ли я получить еще один путь к папке Documents (аналогично Android), которая не является папкой, созданной в Ресурсах? А после этого скопируйте мой файл и работайте над этим скопированным файлом? Знаете ли вы способ (в cocos2d-x), чтобы получить такую ​​папку? – simpl

+0

звучит так, как будто вы пытаетесь написать путь в комплекте приложения, который не будет работать, пакет будет только для чтения. Да, вам нужно получить документы dir с помощью системных методов iOS, чтобы получить эти пути, потому что они расположены за пределами в комплекте с песочницей приложения. – LearnCocos2D

ответ

1

Я делаю что-то подобное в своем приложении, используя как pugixml, так и cocos2d-x. Поэтому я могу подтвердить, что эта комбинация работает хорошо.

Скорее, поскольку на iOS вы не можете читать и записывать данные из и в комплект приложения (который только для чтения), вам нужно будет выполнить простую проверку в каталоге записываемых документов - если вы сохранили файл там , загрузите его, если нет, загрузите из пакета приложений.

Таким образом, в сущности, для загрузки, если сохраненное имя файл «my_save.xml», вот пример поток:

1) Построить путь для сохранения файла в пишущей папке по сцеплению записываемого пути к папке + ваше имя файла. Для этого CCFileUtils должен иметь что-то вроде getWritablePath().

2) если файл существует в папке, загрузите его. В противном случае перейдите к 3).

3) Создайте путь к исходному файлу данных из пакета приложений, используя CCFileUtils :: sharedFileUtils() -> fullPathForFilename(). Загрузите файл оттуда.

Для сохранения просто выполните шаг 1 и сохраните файл.

Смежные вопросы