Я ищу руководство от некоторых программистов iOS Какао относительно того, как можно реализовать механизм загрузки и анализа пользовательского формата файла в объекты модели, которые я буду использовать в памяти. Я знаю, что должно быть много способов взломать этот орех, но позвольте мне поделиться основной идеей текущего пути, который я исследовал, и где я застрял.
Но сначала, вот контекст: скажем, у меня есть существующий формат файла, который я не могу изменить. По сути, это экзотический формат с разделителями каналов, который разбит на несколько разделов, каждый из которых начинается примерно так:
%n|sectionName
... и следующие n строк разделены каналом, уникальным для этого раздела. В некоторых разделах есть строка заголовка с разделителем каналов, за которой следуют n строк данных (также с разделителями каналов), а в других разделах может быть просто n строк с разделителем каналов. В начале файла есть несколько коротких разделов, а затем, наконец, будет один огромный раздел, описывающий узлы k-арного дерева: их родительско-дочерние отношения и любые данные, связанные с каждым узлом. Все говорят, что размер этих файлов исчисляется десятками мегабайт, возможно, будет больше в будущем.
Наконец, последний момент в том, что я довольно новичок в программировании на iOS.
Я начал с использования NSFileHandle
, чтобы получить представление файла как экземпляра NSData
. Это было довольно легко, и после изучения интерфейса NSData
и попыток оттуда поступить, я заметил протокол NSCoding
, который подразумевает возможность архивирования и сериализации объектов в (и из) представления.
Я подумал, что это звучит как что-то, что мне может понадобиться, поскольку я склонен думать о форматах файлов как о просто представлениях, в которые можно маршалировать объекты моей модели. Однако, изучив «Руководство по программированию архивов и сериализаций», я начал сам догадываться. Похоже, API не поддается тому, чего я пытаюсь достичь.
Я пойду сюда в тупик? Должен ли я вместо этого искать подкласс NSInputStream
, или я должен использовать другой подход, который мне не хватает?