Какая шестнадцатеричная часть в пути к папке «Документы»?

ios objective-c nsfilemanager

115 просмотра

1 ответ

7530 Репутация автора

У меня есть файл, расположенный в Documentsпапке моего приложения . Когда приложение закрывается, я сохраняю URL файла в applicationWillTerminateметоде AppDelegate :

// archiver init code
[archiver encodeObject:file.URL forKey:kFileURL];
// finish encoding and write data to file system

Но при попытке восстановить файл при следующем запуске приложения файловый менеджер не может найти файл: после вызова

NSURL *fileURL = [unarchiver decodeObjectForKey:kFileURL];
NSString *filePath = fileURL.path;

метод

[[NSFileManager defaultManager] fileExists:filePath];

возвращается NO.

Я попытался найти причину этого и обнаружил, что путь к Documentsпапке меняется при каждом запуске приложения. Часть, которая изменяется, является шестнадцатеричной папкой в ​​середине. Вот два примера:

/private/var/mobile/Applications/04083A4A-87AC-4E3C-8BA1-F002B97AE304/Documents/...
/private/var/mobile/Applications/65D136BA-42C3-887A-B947-7FE396978153/Documents/...

Я всегда думал, что шестнадцатеричная часть - это своего рода идентификатор, уникальный для каждого приложения. Но как это меняется: что именно это число? И как я могу переместить свой файл после завершения и перезапуска приложения?

Автор: Mischa Источник Размещён: 10.10.2014 06:24

Ответы (1)


2 плюса

318 Репутация автора

Решение

Вы должны просто получить каталог для папки с документами и затем загрузить свой файл.

+ (NSString *)documentDataPath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    if ([paths count] == 0) {
        return nil;
    }
    NSString *directory = [paths objectAtIndex:0];
    if (directory == nil) {
        NSLog(@"NSDocumentDirectory not found!");
    }
    return directory;
}
Автор: pds Размещён: 10.10.2014 06:47
Вопросы из категории :
32x32