Использование ресурсов iPhone в файле C ++ - PullRequest
4 голосов
/ 08 февраля 2010

Мне было интересно, как открыть файл в комплекте приложений из файла C ++.

т.е. У меня есть файл "manifest.xml", который начинает копироваться в комплект приложения. Мне нужен путь из C ++ для загрузки этого файла. Я думаю, что это будет связано с установкой пути где-то в коде Obj-C, чтобы файл находился в рабочем каталоге.

Ответы [ 2 ]

6 голосов
/ 08 февраля 2010

Вы должны использовать CoreFoundation (C) или Foundation (ObjC). Доступ ко всем объектам в вашем комплекте приложений («Основной комплект») можно получить с помощью функций CFBundle / NSBundle.

В CoreFoundation вы делаете (NULL-проверки опущены):

CFURLRef manifest_url = CFBundleCopyResourceURL(CFBundleGetMainBundle(),
                                                CFSTR("manifest"), CFSTR("xml"),
                                                NULL);
char manifest_path[1024];
CFURLGetFileSystemRepresentation(manifest_url, true,
                                 manifest_path, sizeof(manifest_path));
CFRelease(manifest_url);

FILE* f = fopen(manifest_path, "r"); // etc.

В Foundation вы делаете

NSString* manifest_string = [[NSBundle mainBundle] pathForResource:@"manifest"
                                                            ofType:@"xml"];
const char* manifest_path = [manifest_string fileSystemRepresentation];

FILE* f = fopen(manifest_path, "r");  // etc.
2 голосов
/ 08 февраля 2010

Приложение OS X в своей основе является приложением Unix.

Как приложение может найти свой родительский каталог и открыть файл в Linux? Вы сделали бы то же самое в C ++ на OS X.

Теперь, если вы хотите сделать пару вызовов Cocoa или CoreFoundation, вы можете значительно упростить свою жизнь, но если вы требуете, чтобы можно было использовать только вызовы C ++, тогда задача ничем не отличается от любая другая система Unix-sytle.

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