Ответ 1
Вы должны использовать [dir path]
, а не [dir absoluteString]
.
В точке моего файла кода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.
Как это может быть?
ТИА
Вы должны использовать [dir path]
, а не [dir absoluteString]
.
Я несколько минут бил головой о стену. Очевидно, что при каждом запуске в xcode путь к каталогу приложения менялся. Часть UUID. Поэтому вместо сохранения полного пути я закончил сохранение постфикса и prefixing, что с любым классом хранения подразумевается: временный, кэшированный или документов: - [
Существует различие между 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
дает вам путь вместе со схемой.