initWithCoder:在 NSObject 中不可见?

Posted

技术标签:

【中文标题】initWithCoder:在 NSObject 中不可见?【英文标题】:initWithCoder: not visible in NSObject? 【发布时间】:2012-04-28 11:16:18 【问题描述】:

我有一个界面:

#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 有什么不同吗? 谢谢

【问题讨论】:

【参考方案1】:

ARC 和手动引用计数没有什么不同。 NSObject 不符合 NSCoding,因此不提供 -initWithCoder:-encodeWithCoder:。只是不要调用这些方法的超类实现。

- (id)initWithCoder: (NSCoder *)aCoder 
    self = [super init];
    if (self) 
        [aCoder decodeObject: filepath forKey: kFilepath];
    
    return self;

【讨论】:

以上是关于initWithCoder:在 NSObject 中不可见?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在这里使用awakeFromNib还是initWithCoder?

initWithCoder 在 ios 中显示错误的帧

我应该在这里使用 awakeFromNib 还是 initWithCoder ?

当覆盖 initWithCoder 时,总是需要调用 [super initWithCoder: coder]

为啥出口不能在 initWithCoder 中初始化?

为啥 UITableViewCell 初始化在 initWithCoder 中不起作用