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