Это предпочтительный метод, который использует URL-адреса для получения ссылки непосредственно на каталог tmp, а затем возвращает URL-адрес файла (pkm.jpg) для этого каталога:
Swift 4.1
let url = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
.appendingPathComponent("pkm", isDirectory: false)
.appendingPathExtension("jpg")
// Then write to disk
if let data = UIImageJPEGRepresentation(image, 0.8) {
do {
try data.write(to: url)
} catch {
print("Handle the error, i.e. disk can be full")
}
}
Swift 3.1
let tmpURL = try! URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
.appendingPathComponent("pkm")
.appendingPathExtension("jpg")
print("Filepath: \(tmpURL)")
Обратите внимание, что возможная ошибка не обрабатывается!
Swift 2.0
let tmpDirURL = NSURL.fileURLWithPath(NSTemporaryDirectory(), isDirectory: true)
let fileURL = tmpDirURL.URLByAppendingPathComponent("pkm").URLByAppendingPathExtension("jpg")
print("FilePath: \(fileURL.path)")
Objective-C
NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"pkm"] URLByAppendingPathExtension:@"jpg"];
NSLog(@"fileURL: %@", [fileURL path]);
Обратите внимание, что некоторые методы по-прежнему запрашивают путь в виде строки, а затем используют [fileURL path]
, чтобы вернуть путь в виде строки (как показано выше в NSLog).
При обновлении текущего приложения все файлы в папках:
<Application_Home>/Documents/
<Application_Home>/Library/
гарантированно будет сохранено из старой версии (исключая подкаталог <Application_Home>/Library/Caches
). Используйте папку Documents
для файлов, к которым пользователь может иметь доступ, и папку Library
для файлов, которые использует приложение, и которые пользователь не должен видеть.
Другим более длинным способом может быть получение URL-адреса в каталоге tmp, сначала получая каталог Document и удаляя последний компонент path, а затем добавляя папку tmp:
NSURL *documentDir = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *tmpDir = [[documentDir URLByDeletingLastPathComponent] URLByAppendingPathComponent:@"tmp" isDirectory:YES];
NSLog(@"tmpDir: %@", [tmpDir path]);
Тогда мы можем обратиться к файлу, то есть pkm.jpg, как показано здесь:
NSString *fileName = @"pkm";
NSURL *fileURL = [tmpDir URLByAppendingPathComponent:fileName isDirectory:NO];
fileURL = [fileURL URLByAppendingPathExtension:@"jpg"];
То же самое может быть достигнуто с помощью строк, которые использовались ранее в старых системах iOS, но первый метод URL выше является рекомендуемым (если вы не пишете в более старые системы: iPhone OS 2 или 3):
NSString *tmpDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
tmpDir = [[tmpDir stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"tmp"];
NSString *filePath = [[tmpDir stringByAppendingPathComponent:@"pkm"] stringByAppendingPathExtension:@"jpg"];