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; }