2013-07-31 1 views
0

Я использую следующее, чтобы инициализировать объект bundle в viewDidLoad.iOS: объект NSBundle становится недействительным после удаления и воссоздания папки

documentBundle = [[NSBundle alloc] initWithPath:path]; 

Где путь выглядит следующим образом;

/Users/..../Library/Application Support/iPhone Simulator/6.1/Applications/B69B8A03-C029-4DF5-89E0-1429E73E840F/Documents/Downloads/documents.bundle 

При запуске приложения мне нужно обновить document.bundle и избавиться от старого. Поэтому я удаляю его и загружаю последнюю из Интернета. Я подтвердил, что объект связки указывает на ту же папку, но после замены существующей папки он не может получить содержимое внутри этого пакета. Если я перезапущу приложение, я получаю последнее содержимое! Я не уверен, что здесь происходит. Может ли кто-нибудь указать, что может быть неправильным?

После возвращения Ниль путь после замены пучка! Я вижу, что необходимый файл находится прямо с терминала!

NSString *path = [documentBundle pathForResource:filename ofType:extension]; 

Я также попытался инициализировать расслоение объекта после замены сверток, но все это указывает на тот же адрес памяти (печатается с использованием% р) и не возвращает содержимое из нового комплекта.

Я получаю такой же результат как на устройстве, так и на симуляторе.

ответ

0

Кажется, NSBundle запоминает файловую систему во время создания объекта. После этого он не распознает новые файлы, добавленные в эту папку! Если вы удаляете папку и воссоздаете новую с тем же именем, она также не распознает ее. Я попытался NSBundle всегда указывать каталог Documents и использовать [pathForResource: имя_файла ofType: extension inDirectory: directory], но это также не работает при замене каталога. Короче говоря, никогда не занимайтесь NSBundle, если ваша файловая система динамична с использованием тех же имен!

Я нашел решение, создав текущую временную папку для каждой новой загрузки и удалив старую папку, а затем сбросьте объект NSBundle. Теперь он работает и создает правильный путь, поскольку он на самом деле не существует! Читайте Apple documents on NSBundle для более подробной информации.

Смежные вопросы