NSObject不支持encodeWithCoder?
我第一次使用编码为了保存我的应用程序的数据。 我一直在看的例子说调用[super encodeWithCoder:coder];
为自定义类。
我有一个扩展NSObject
的类,但获取下面的错误消息。 这是因为NSObject
是基类,没有什么可以编码?
实例消息的接收器types“NSObject”没有声明一个select器“encodeWithCoder:”的方法
- (void)encodeWithCoder:(NSCoder *) coder { [super encodeWithCoder:coder]; // <-------------------------ERROR [coder encodeInt:noteIndex forKey:@"noteIndex"]; [coder encodeCGRect:cellRect forKey:@"cellRect"]; [coder encodeBool:noteOn forKey: @"noteOn"]; [coder encodeInt:note forKey:@"note"]; [coder encodeInt:velocity forKey:@"velocity"]; [coder encodeInt:channel forKey:@"channel"]; [coder encodeInt:releaseVelocity forKey:@"releaseVelocity"]; [coder encodeFloat:duration forKey:@"duration"]; }
没错, NSObject
不符合NSCoding
,所以它不实现encodeWithCoder:
幸运的是, NSObject
本身没有任何数据要编码,所以你所要做的就是:
- (void)encodeWithCoder:(NSCoder *) coder { [coder encodeInt:noteIndex forKey:@"noteIndex"]; [coder encodeCGRect:cellRect forKey:@"cellRect"]; [coder encodeBool:noteOn forKey: @"noteOn"]; [coder encodeInt:note forKey:@"note"]; [coder encodeInt:velocity forKey:@"velocity"]; [coder encodeInt:channel forKey:@"channel"]; [coder encodeInt:releaseVelocity forKey:@"releaseVelocity"]; [coder encodeFloat:duration forKey:@"duration"]; }
和你的initWithCoder:
只是看起来像:
- (id)initWithCoder:(NSCoder *)decoder { if (self = [super init]) { self.noteIndex = [decoder decodeIntForKey:@"noteIndex"]; // and so on } return self; }