Файлы списка свойств могут хранить только базовые типы данных и не могут содержать пользовательских объектов.Вам нужно преобразовать ваш объект в NSData
объект, если вы хотите, чтобы он был записан в список.Вы можете сделать это с помощью NSKeyedArchiver
, который закодирует объект, соответствующий протоколу NSCoding
, в объект NSData
.
DownloadObject *object = [[DownloadObject alloc]initWithKey:number name:@"hey" progress:number size:number path:@"hey" progressBytes:number];
NSData* objData = [NSKeyedArchiver archivedDataWithRootObject:object];
[downloadArray addObject:objData];
[object release];
Когда вы хотите восстановить свой объект из NSData
объект, вы используете NSKeyedUnarchiver
:
NSData* objData = [downloadArray objectAtIndex:0];
DownloadObject* object = [NSKeyedUnarchiver unarchiveObjectWithData:objData];
У вас также есть несколько утечек памяти в вашем коде.В вашем методе -initWithCoder:
вы не должны использовать аксессоры для установки значения ivars, вы должны просто установить ivars напрямую, например так:
key = [[coder decodeObjectForKey:@"Key"] copy];
Вы звоните -retain
и затем используетеметод доступа, который указан как copy
, что означает, что ваш объект имеет счет сохранения 2 и не будет освобожден.В общем, вы должны избегать использования методов доступа в методах init.
Кроме того, в коде, где вы выделяете объект downloadArray
, вы вызываете -alloc
, а затем -retain
для объекта, который покинет его.с retainCount 2. Вы должны перечитать Objective-C Руководство по управлению памятью .