0
@property (strong) UIImage *thumbImage;

..

albumData *album1 = [[albumData alloc]initWithTitle:@"Eminem" style:@"123" thumbImage:[UIImage imageNamed:@"1.jpeg"]];

..

- (void)encodeWithCoder:(NSCoder *)coder {
    NSData *image = UIImagePNGRepresentation(_thumbImage);
    [coder encodeObject:(image) forKey:@"thumbImageData"];

}

- (id)initWithCoder:(NSCoder *)coder {
    NSData *imgData = [coder decodeObjectForKey:@"thumbImageData"];
    _thumbImage = [UIImage imageWithData:imgData ];
    return self;
}

現在、上記のコードを使用して plist ファイル内にデータを保存しています。実際の画像を保存するのではなく、画像パス\名前だけを保存するには、コードをどのように変更すればよいですか。

4

2 に答える 2

0

ファイル名がある場合は、-[NSBundle pathForResource:ofType:]を使用してそのパスを取得できます。例:

[[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpeg"];

rmaddyが言ったように、これはUIImageから取得できないため、画像を作成するときに取得して保持する必要がある場合があります。

于 2012-12-14T16:19:23.653 に答える
0

使用する必要があります

@property (copy) NSString *thumbImage;

代わりに画像名のみを保存します

@property (strong) UIImage *thumbImage;

次に、文字列としてコーディング/エンコードします。画像が必要なときは書くだけ

[UIImage imageNamed:album1.thumbImage];

別の解決策は、UIImage クラスをサブクラス化し、画像パス プロパティを追加し、UIImage の初期化メソッドをオーバーライドしてパスの保存をサポートし、コーダー/エンコーダー メソッドをオーバーライドすることです。

編集:

コード例を次に示します。

UIImageWithPath.h

 #import <UIKit/UIKit.h>

@interface UIImageWithPath : UIImage{
    NSString* filepath;
}

@property(nonatomic, readonly) NSString* filepath;

-(id)initWithImageFilePath:(NSString*) path;
@end

UIImageWithPath.m

#import "UIImageWithPath.h"

@implementation UIImageWithPath
@synthesize filepath;

-(id)initWithImageFilePath:(NSString*) path{
    self = [super initWithContentsOfFile:path];
    if(self){
        [filepath release];
        filepath = [path copy];
    }

    return self;
}

-(void)dealloc{
    [filepath release];
    [super dealloc];
}
@end

使用するサンプル:

- (void)viewDidLoad
{
    [super viewDidLoad];

    img = [[UIImageWithPath alloc] initWithImageFilePath:[[NSBundle mainBundle] pathForResource:@"pause" ofType:@"png"]];
    iv.image = img;
}

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"image file path %@", img.filepath);
}

したがって、コード/エンコード メソッドは次のようになります。

-(void)encodeWithCoder:(NSCoder *)coder {
    NSString *path = _thumbImage.filepath;
    [coder encodeObject:(path) forKey:@"thumbImageData"];

}

- (id)initWithCoder:(NSCoder *)coder {
    NSString *path = [coder decodeObjectForKey:@"thumbImageData"];
    _thumbImage = [[UIImageWithPath alloc] initWithImageFilePath:path];
    return self;
}
于 2012-12-14T16:29:07.580 に答える