1

アプリの何が問題なのか頭を悩ませています。UIImages を保存してロードしようとしていますが、簡単ですよね? そうではないようです。

一意の文字列で画像を保存、読み込み、削除するこれらのメソッドを持つクラスがあります。好きなように、シンプルで素敵です。クラスは次のとおりです。

imageSavedLoad.h:

#import <Foundation/Foundation.h>

@interface imageSaveLoad : NSObject

- (void)saveImage:(UIImage*)image forKey:(NSString*)imageName;
- (void)removeImage:(NSString*)fileName;
- (UIImage*)loadImage:(NSString*)imageName;

@end

imageSaveLoad.m:

#import "imageSaveLoad.h"


@implementation imageSaveLoad

//saving an image
- (void)saveImage:(UIImage*)image forKey:(NSString*)imageName
{
    NSData *imageData = UIImagePNGRepresentation(image);
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]];
    [fileManager createFileAtPath:fullPath contents:imageData attributes:nil];
    NSLog(@"image saved");
}

//removing an image
- (void)removeImage:(NSString*)fileName
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", fileName]];
    [fileManager removeItemAtPath: fullPath error:NULL];
    NSLog(@"image removed");
}

//loading an image
- (UIImage*)loadImage:(NSString*)imageName
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]];
    return [UIImage imageWithContentsOfFile:fullPath];
}

@end

画像を保存、ロード、または削除したい場所にクラスをインポートします。#import "imageSaveLoad.h"

次に、そのインスタンスを作成し、必要なメソッドを呼び出します (ここでは保存します)。

imageSaveLoad *imgSL = [[imageSaveLoad alloc] init];
[imgSL saveImage:photoImgView.image forKey:@"yourPhoto"];

次に、画像を取得する別のビュー/クラスで:

imageSaveLoad *imgSL = [[imageSaveLoad alloc] init];
yourImgView.image = [imgSL loadImage:@"yourPhoto"];

しかしyourImgView、何も表示されず、空白です。

それで、どこが間違っているのですか?すべての接続を確認しIBOutlet、すべてのコードが呼び出されていることを確認しました。使用している方法に問題はありますか?

4

1 に答える 1

1

画像を保存するときは、次の行を置き換えてみてください:

 [fileManager createFileAtPath:fullPath contents:imageData attributes:nil];

 [imageData writeToFile:fullpath atomically:YES];
于 2012-07-24T19:08:32.583 に答える