22

NSTemporaryDirectory画像を保存するために使用すると、画像がに保存されるのはなぜですか

/var/folders/oG/oGrLHcAUEQubd3CBTs-1zU+++TI/-Tmp-/

ではなく

/Users/ MyMac /Library/Application Support/iPhone Simulator/4.3.2/Applications/A685734E-36E9-45DD-BBE7-0A46F8F91DAF/tmp

これが私のコードです:

-(NSString *)tempPath
{
    return NSTemporaryDirectory();
}

-(void) saveMyFoto
{
    NSString *urlNahledu = [NSString stringWithFormat:@"%@%@%@",@"http://www.czechmat.cz", urlFotky,@"_100x100.jpg"];
    NSLog(@"%@", urlNahledu);


    UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlNahledu]]];

    NSData *data = [NSData dataWithData:UIImageJPEGRepresentation(image, 0.8f)];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSLog(@"%@    %@", paths, [self tempPath]);

    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:@"pkm.jpg"];

    [data writeToFile:localFilePath atomically:YES];
}
4

4 に答える 4

52

これは、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と、アプリが使用し、ユーザーに表示されないようにするファイル用のフォルダーを使用します。


もう1つの長い方法は、最初にDocumentディレクトリを取得し、最後のパスコンポーネントを削除してから、tmpフォルダを追加することにより、tmpディレクトリへのURLを取得することです。

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"];
于 2012-08-18T23:37:46.093 に答える
3

シミュレーターで実行されているアプリは、iOS デバイスのように実際にはサンドボックス化されていないためです。シミュレータでは、Mac OS からの一時ディレクトリが NSTemporaryDirectory() で返されます。iOS デバイスでは、一時ディレクトリは実際にはサンドボックス内にあります。この違いは、アプリ開発者として気にする必要はありません。

于 2011-09-16T13:17:54.237 に答える
-2

イメージを /Users/MyMac/Library/Application Support/iPhone Simulator/4.3.2/Applications/A685734E-36E9-45DD-BBE7-0A46F8F91DAF/tmp に保存する場合

/Users/MyMac/Library/Application Support/iPhone Simulator/4.3.2/Applications/A685734E-36E9-45DD-BBE7-0A46F8F91DAF までの場所を提供する nshomedirectory() を使用してから、/tmp を配置して画像を保存します。

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                     NSUserDomainMask, YES); 
NSString* docDir = [paths objectAtIndex:0];
NSString* file = [docDir stringByAppendingString:@"/tmp"];
于 2011-09-16T13:33:51.090 に答える