Nibファイルをロードしてオブジェクトをインスタンス化することを意図している私のクラスには次のメソッドがあります:
- (id)initWithCoder:(NSCoder*)aDecoder
{
if(self = [super initWithCoder:aDecoder]) {
// Do something
}
return self;
}
このクラスのオブジェクトをどのようにインスタンス化しますか?このNSCoder
とは何ですか?どうすれば作成できますか?
MyClass *class = [[MyClass alloc] initWithCoder:aCoder];
また、次のメソッドを次のように定義する必要があります。
- (void)encodeWithCoder:(NSCoder *)enCoder {
[super encodeWithCoder:enCoder];
[enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY];
// Similarly for the other instance variables.
....
}
また、initWithCoderメソッドで次のように初期化します。
- (id)initWithCoder:(NSCoder *)aDecoder {
if(self = [super initWithCoder:aDecoder]) {
self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY];
// similarly for other instance variables
....
}
return self;
}
オブジェクトの標準的な方法、つまりオブジェクトを初期化できます
CustomObject *customObject = [[CustomObject alloc] init];
NSCoder
クラスは、オブジェクトのアーカイブ/アーカイブ解除(整列化/非整列化、シリアル化/逆シリアル化)に使用されます。
これは、オブジェクトをストリーム(ファイル、ソケットなど)に書き込み、後でまたは別の場所でそれらを取得できる方法です。
http://developer.Apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html を読むことをお勧めします