0

NSFileManager を使用して、サンドボックス化されたアプリの Cache ディレクトリに画像をキャッシュしようとしています。残念ながら、私のコードは機能していないようです。

- (BOOL)saveImageToCacheFolder
{
    NSFileManager *filemgr = [NSFileManager defaultManager];
    NSString *cachePath = [[[filemgr URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject] absoluteString];
    NSString *fullpath = [cachePath stringByAppendingPathComponent:@"test.jpg"];
    NSURL *imageURL = [FlickrFetcher urlForPhoto:self.photoData format:FlickrPhotoFormatLarge];
    NSData *imageData = [NSData dataWithContentsOfURL:imageURL];

    BOOL success = false;
    if (imageData != nil) {
        success = [imageData writeToURL:[NSURL URLWithString:fullpath] atomically:true];
        if (!success) NSLog(@"Did Not Managed to save the image");
    }
    return success;
}

これが私がやろうとしていることです。まず、デフォルトの NSFileManager を取得します。次に、アプリのキャッシュ ディレクトリへの相対パスを取得します。3 番目に、ファイルの名前を追加します (ここでは、今のところ test を書きました)。4 番目に、イメージを NSData に変換します。4 番目に、指定されたパスに NSData オブジェクトを書き込みます。

編集: imageData が nil かどうかを確認するための if ステートメントを追加しました

4

1 に答える 1

3

これを試して:

NSArray *myPathList = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath    = [myPathList  objectAtIndex:0];
NSString *fullpath = [cachePath stringByAppendingPathComponent:@"test.jpg"];

NSURL *imageURL = [FlickrFetcher urlForPhoto:self.photoData format:FlickrPhotoFormatLarge];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];

if (imageData != nil) {
    success = [imageData writeToURL:[NSURL fileURLWithPath:fullpath] atomically:YES];
    if (!success) NSLog(@"Did Not Managed to save the image");
}
于 2012-09-03T04:07:38.030 に答える