6

私はインターフェースを持っています:

#import <Foundation/Foundation.h>

@interface Picture : NSObject;

@property (readonly) NSString *filepath;
- (UIImage *)image;

@end

および実装:

#import "Picture.h"

#define kFilepath @"filepath"

@interface Picture () <NSCoding> {
    NSString *filepath;
}

@end


@implementation Picture
@synthesize filepath;

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    return self;

}

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:filepath forKey:kFilepath];
}

- (UIImage *)image {
    return [UIImage imageWithContentsOfFile:filepath];
}

@end

エラーが発生します:ARCの問題-「NSObject」の表示された@interfaceがセレクター「initWithCoder:」を宣言していません

ARCを使用する場合のNSCodingについて何か違いはありますか?ありがとう

4

1 に答える 1

14

ARCと手動参照カウントの間に違いはありません。NSObjectに準拠していないため、またはNSCodingを提供しません。これらのメソッドのスーパークラスの実装を呼び出さないでください。-initWithCoder:-encodeWithCoder:

- (id)initWithCoder: (NSCoder *)aCoder {
    self = [super init];
    if (self) {
        [aCoder decodeObject: filepath forKey: kFilepath];
    }
    return self;
}
于 2012-04-28T11:24:35.463 に答える