Какие данные использует Apple на примере GLPaint? - PullRequest
1 голос
/ 10 июля 2011

Несколько месяцев назад я сделал приложение на основе Apple GLPaint.Это прекрасно работает.

Я записал наборы точек, которые рисуют простые рисунки на экране.и сохранил их как массив точек (преобразованный в NSValue).

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

<data>
AAC8QgAAsEMAAMJCAICoQwAAwkIBBAKRDAADCQgCAnUMAAMJCAACYQwAAwEIAgJRDAADA
QgCAkkMAAMBCAACRQwAAwEIAgJBDAADAQgCAkEM=
</data>
<data>
AACoQgAAnEMAALpCAACdQwAAxEIAAJ1DAAGGGgAAnUMAANpCAICdQwAA4kIAgJ5DAADs
QgCAn0MAAOxCAICfQw==
</data>

Итак, каждая группа - это один рисунок, и это настолько компактно, чем мои списки CGPoints.

Мне удалось преобразовать массив CGPoints в данные и прочитать файл обратно.

НО Когда я пытаюсь открыть каждый файл данных формы, я получаю это (на textMate, textEdit, xCode...):

one of the CGPoints groups data file Я хочу понять:

  1. Что Apple использует для получения этого сжатого формата списка CGPoints?
  2. как можноя открываю свой файл данных более читабельным способом?

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Данные в файле Recording.data Apple в этом образце приложения представляют собой представление XML Plist NSArray, содержащего набор объектов NSData, каждый из которых содержит байты, представляющие массив структур CGPoint.Обратите внимание, что это зависит от двоичного представления CGFloat и конкретной компоновки структуры CGPoint, которая может различаться в разных компиляторах или версиях одного и того же компилятора.

Ваш снимок экрана выглядит как вывод NSKeyedArchiver,безопаснее, но имеет гораздо больше накладных расходов.

Если вы хотели компактное, но все еще переносимое представление, вы можете вручную сериализовать отдельные CGFloats в байтовый массив в переносимом формате ( этот предыдущий вопрос можеттам вам поможет), а затем оберните байтовые массивы в NSData, поместите NSDatas в NSArray и используйте writeToFile:atomically: для вывода беспорядка в список, как это делает Apple.

1 голос
/ 15 июля 2011

Похоже, что Base64 . На этой странице упоминается:

Обратите внимание, что байты данных кодируются в формате base-64 между тегами <data> и </data>.

<data> для NSData, который можно получить из массива с помощью +[NSKeyedArchiver archivedDataWithRootObject:].

...