objective-c – initWithCoder:在NSObject中不可见?

我有一个界面:
#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有什么不同吗?
谢谢

解决方法

ARC和手动引用计数之间没有什么不同. NSObject不符合NSCoding,因此不提供-initWithCoder:或-encodeWithCoder:.只是不要调用那些方法的超类实现.
- (id)initWithCoder: (NSCoder *)aCoder {
    self = [super init];
    if (self) {
        [aCoder decodeObject: filepath forKey: kFilepath];
    }
    return self;
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...