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?
我应该在这里使用 awakeFromNib 还是 initWithCoder ?