2015-02-03 3 views
2

Я знаю, что iOS Simulator находится в другом каталоге каждый раз, когда он запускается; Имея это в виду, у меня есть этот код, который дает мне директорию SQLite файлов Ядро данных:Почему NSFIleManager -fileExistsAtPath не может найти существующий файл, если правильный путь?

// find current directory for saori.sqlite 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSURL *documentDirectory = [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask]firstObject]; 
NSString *sqliteFilePath = [[documentDirectory URLByAppendingPathComponent:@"Application Support/SalonBook/saori.sqlite"] absoluteString]; 
if ([fileManager fileExistsAtPath:sqliteFilePath]) 
    [MagicalRecord cleanUp]; // set stack, etc to 'nil' 
else { 
    NSLog(@"\n\n-->sqlite files not found"); // log message "unable to find sqlite files 
    return; 
} 

Это распечатка объекта sqliteFilePath:

Printing description of sqliteFilePath: 
file:///Users/rolfmarsh/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/C8FF20F0-41E4-4F26-AB06-1F29936C2208/Library/Application%20Support/SalonBook/saori.sqlite 

И это изображение файл из Finder: enter image description here

проблема заключается в: Я хожу в sqliteFilePath и saori.sqlite файл действительно есть! Почему -fileExistsAtPath не удалось?

+0

Не знаете, почему это было отклонено. Законный вопрос с контентом. +1. – ninehundredt

+0

Я испытываю почти что-то похожее. Кажется, если я храню путь, а затем конвертирую в абсолютный URL-адрес, он терпит неудачу. Но если я храню абсолютную строку, то не использую fileURLWithPath, но вместо urlWithName: она преуспевает, думал, что она будет меняться до тех пор, пока я нахожусь на правильной половине этого. –

ответ

7

Потому что это еще URL. Путь к файлу не имеет протокола, поэтому префикс вашего пути file:/// недействителен и не может быть разрешен. Поскольку недопустимый путь не содержит файлов, fileExistsAtPath: возвращает NO.

Не волнуйтесь, но вместо вызова absoluteString на объект URL-адреса вы можете просто позвонить path, и он вернет путь.

+0

Не работает ... можете ли вы привести мне пример что вы имеете в виду, когда говорите «просто вызов»? (принимая мое заявление, как бы это выглядело?) Извините за хромой вопрос, но я не понимаю, как это будет работать ... SD – SpokaneDude

+0

@ spokane-dude Вместо того, чтобы вы называли 'absoluteString', вызывайте' path' вместо. – JustSid

+0

Спасибо, спасибо! Так оно и было ... Я видел инструкцию * path * в некоторых примерах, которые я пытался отслеживать, но ничего не было в документах iOS, где я мог найти объяснение ... еще раз спасибо! – SpokaneDude

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