私のRowクラスには、initWithCoderメソッドがあり、そのメソッドで復元されたものはすべて正常に機能しますが、メソッド内でのみ機能します。メソッドが呼び出された後、Rowクラスにあるサウンドの配列を失います。サウンドクラスにもinitWithCoderメソッドがあり、サウンドは正常に再生されますが、RowクラスのinitWithCoderメソッドでのみ再生されます。Rowオブジェクトをデコードすると、サウンド配列が完全に消え、呼び出すことができなくなります。
initWithCoderのソースは次のとおりです。
- (id) initWithCoder:(NSCoder *)coder {
...
soundArray = [coder decodeObjectForKey:@"soundArray"];
NSLog(@"%d",[soundArray count]);
return self;
}
ログには、カウントが8と表示されます(これはアーカイブ解除中です)。次に、作成した行オブジェクトが割り当てられます。そして、結果の行オブジェクトには、soundArrayがなくなります。
[NSKeyedArchiver archiveRootObject:row toFile:@"DefaultRow"];
...
row = [NSKeyedUnarchiver unarchiveObjectWithFile:@"DefaultRow"];
そのため、soundArrayを呼び出すとクラッシュします。
//ERROR IS HERE
NSLog(@"%d",[[row soundArray] count]);
助けてください(soundArrayはNSMutableArrayです)。