使用する必要があります
@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;
}