FileExistsAtPath: возврат NO для файлов, которые существуют

В точке моего файла кодаExistsAtPath: возвращает NO для файлов, которые я подтвердил. Я почесываю голову и не могу понять, почему он не работает, поэтому он изменил его на этот код, поскольку этот каталог абсолютно существует, но если он все равно не создается.

NSError* err = nil;
NSURL *dir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory
                                                       inDomain:NSUserDomainMask
                                              appropriateForURL:nil   
                                                         create: YES
                                                          error:&err];
BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:[dir absoluteString]];

После запуска этого кода папка каталога приложений существует, а значение err равно 0, но существует NO.

Как это может быть?

ТИА

Ответ 1

Вы должны использовать [dir path], а не [dir absoluteString].

Ответ 2

Я несколько минут бил головой о стену. Очевидно, что при каждом запуске в xcode путь к каталогу приложения менялся. Часть UUID. Поэтому вместо сохранения полного пути я закончил сохранение постфикса и prefixing, что с любым классом хранения подразумевается: временный, кэшированный или документов: - [

Ответ 3

Существует различие между path и url. Путь в представлении unix - это место, где существует ваш конкретный файл или каталог. Как "/Users/username/Desktop/myfile.txt"

Здесь URL-адрес не только содержит местоположение, но и схему, например: http://или https://, и в нашем случае файл url (file:///Users/username/Desktop/myfile.txt)

Методы типа fileExistsAtPath или removeItemAtPath нуждаются в пути в параметре, а не в url.

В то время как методы, такие как copyItemAtURL:toURL:error:(NSError * _Nullable *)error, ожидают URL.

Используйте атрибут path объекта NSURL для извлечения пути. absoluteString дает вам путь вместе со схемой.