nonnull) NSString * name; @property (nonatomic, readonly, strong, nullable) NSURL * pictureUrl; @property (nonatomic, readonly, assign) NSInteger amount; - (nonnull instancetype)initWithName:(nonnull NSString *)name pictureUrl:(nullable NSURL *)pictureUrl amount:(NSInteger)amount; @end static NSString *const kPromoModelName = @"PromoModel.name"; static NSString *const kPromoModelPictureUrl = @"PromoModel.pictureUrl"; static NSString *const kPromoModelAmount = @"PromoModel.amount"; @implementation PromoModel - (nonnull instancetype)initWithName:(nonnull NSString *)name pictureUrl:(nullable NSURL *)pictureUrl amount:(NSInteger)amount { self = [super init]; if (self) { _name = [name copy]; _pictureUrl = pictureUrl; _amount = amount; } return self; } - (nullable instancetype)initWithCoder:(NSCoder *)decoder { self = [super init]; if (self) { _name = [decoder decodeObjectForKey:kPromoModelName]; _pictureUrl = [decoder decodeObjectForKey:kPromoModelPictureUrl]; _amount = [decoder decodeIntegerForKey:kPromoModelAmount]; } return self; } - (void)encodeWithCoder:(NSCoder *)coder { [coder encodeObject:_name forKey:kPromoModelName]; [coder encodeObject:_pictureUrl forKey:kPromoModelPictureUrl]; [coder encodeInteger:_amount forKey:kPromoModelAmount]; } @end 5