Есть несколько проблем с размещенным кодом.Первое:
self.idnum = [[decoder decodeIntegerForKey:@"idnum"] retain];
Этот код отправляет 'retain' в NSInteger.NSIntegers не являются объектами, они просто скаляры.Это незаконно.Просто используйте вместо этого:
self.idnum = [decoder decodeIntegerForKey:@"idnum"];
Далее этот код:
self.exercises = [[decoder decodeObjectForKey:@"exercises"] retain];
Превышение удержания и приведет к утечке.Поскольку вы объявили упражнения следующим образом:
@property(nonatomic,retain) NSMutableArray *exercises;
Это «сохранение» означает, что когда вы вызываете установщик, оно сохранит переданное значение, прежде чем вставить его в переменную экземпляра «упражнения».Вы сохраняете данные до вызова сеттера, так что это двойное удержание.
Вы можете исправить это, изменив код на:
exercises = [[decoder decodeObjectForKey:@"exercises"] retain];
Или:
self.exercises = [decoder decodeObjectForKey:@"exercises"];