NSBundle, это может быть использовано для сохранения документа проекта? - PullRequest
2 голосов
/ 27 января 2011

Я создаю приложение для Mac OS X, которое можно использовать для создания «проектов». Когда пользователь сохраняет проект, он будет сохранять много ресурсов: файлы изображений, текстовые файлы, файлы sqlite и т. Д.

Я могу создать папку в Документах для каждого проекта, и в этой папке я могу разместить все активы проекта и просто включить один файл проекта, который используется для открытия проекта.

Я читал о NSBundle, который я хотел бы использовать. Но я читал о них только в контексте комплектов приложений. Можно ли использовать NSBundle таким образом? Где пользователь видит только один файл и может переместить его куда угодно.

Имеет ли смысл делать то, что я пытаюсь, используя NSBundle? Или есть другой способ сделать это?

(Я довольно новичок в программировании на MacOS X)

UPDATE

Я полагаю, что iPhoto использует этот метод для хранения "iPhoto Library", это то, что я хотел бы сделать с моим приложением, это NSBundle, что я должен изучить?

Ответы [ 3 ]

4 голосов
/ 27 января 2011

Да, это возможно, и в прошлом использовалось немало приложений.Метод описан в этом документе .Как только он будет четко объявлен в Info.plist вашего приложения, Finder покажет полученный пакет в виде одного файла.

Однако я не могу рекомендовать вам это делать.В прошлом Apple Keynote использовала пакетный подход, но больше не использует его.Точно так же OmniGraffle (приложение для создания диаграмм в OS X с длинной историей) использовало пакеты для сохранения проектов, но оно также перестало это делать.программное обеспечение электронной почты, не принадлежащее Apple, или любой браузер и т. д., хотя Finder показывает его в виде файла.Было бы беспорядком, если пользователь захочет прикрепить ваш документ в формате пакета к электронному письму, которое он / она создает в Gmail, например, в браузере.Это смутило многих людей.

Итак, это возможно, но я не рекомендую это.Одним из выходов является использование заархивированного пакета в качестве видимого пользователю файла и его разархивирование, когда пользователь открывает его во временный каталог.Затем вы можете использовать NSBundle и / или NSFileWrapper apis для доступа к файлам внутри него.

2 голосов
/ 27 января 2011

Пример Apple File File Wrapper, похоже, вам нужен: http://developer.apple.com/library/mac/#samplecode/PersistentDocumentFileWrappers/Introduction/Intro.html

Также демонстрируется, как сохранить постоянное хранилище Core Data в комплекте.Вы можете оставить эту часть, если вы просто хотите хранить ресурсы.

0 голосов
/ 27 января 2011

Класс NSBundle представляет пакет приложения и может использоваться для доступа к ресурсам в приложении, но вы бы хотели использовать его для данных приложения, а не для данных пользователя.

Для каждого из упомянутых вами ресурсов есть способ сохранения этого типа, например, для файлов изображений, вы можете использовать NSData для сохранения данных изображений на диск, а для текстовых файлов вы можете используйте метод writeToFile:atomically:encoding:error:.

Возможно, вы захотите взглянуть на Базовые данные (http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/cdProgrammingGuide.html),) - очень хорошую основу для управления моделью данных пользователя, чтобы увидеть, соответствует ли она вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...