2010-06-15 1 views
0

В моем классе Row у меня есть метод initWithCoder, и все восстановленное в этом методе работает нормально, но только внутри метода. После вызова метода я теряю массив звуков, который находится в моем классе Row. Класс звуков также имеет метод initWithCoder, и звук воспроизводится отлично, но только в методе initWithCoder класса Row. После декодирования объекта 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"]; 

Так что теперь, когда я вызываю звук, он падает.

//ERROR IS HERE 
NSLog(@"%d",[[row soundArray] count]); 

Помогите пожалуйста (soundArray - это NSMutableArray).

ответ

2

Вам необходимо сохранить soundArray в initWithCoder: —, вы можете прочитать информацию о управлении памятью какао на Apple's site.

Если вы не указали retain soundArray, то это будет dealloc 'ed, так как вы не заявили права собственности на него. В принципе, decodeObjectForKey: возвращает объект, который был autoreleased.

+0

Вы только что решили все мои проблемы. Спасибо, сэр. –

+2

Dane Man: Не пропустите документацию, с которой вы связались. Прочтите его и прочитайте все. Требуется чтение для каждого программиста Cocoa и Cocoa Touch. –