Я не думаю, что возможно сериализовать блоки.
Я бы инкапсулировал данные в класс и реализовал протокол NSCoding
. Э.Г.
@interface Promotion :NSObject<NSCoding> { // protocol might be better
}
-(void)calculatePromotion;
@end
тогда
@interface PromotionX : Promotion {
... data needed for a promotion of type X ...
}
-initWithDataA: (A*)a andDataB:(B*) b
@end
Теперь вам нужно реализовать различные вещи
@implementation PromotionX
-initWithDataA: (A*)a and DataB:(B*)b{
... save a and b to the ivars ...
}
-(void)calculatePromotion{
... do something with a and b
}
#pragma mark Serialization support
-initWithCoder:(NSCoder*)coder{
... read off a and b from a coder ...
}
-(void)encodeWithCoder:(NSCoder*)coder{
... write a and b to a coder ...
}
@end
Аналогично для продвижения типа Y, Z и т. Д. Теперь его можно сохранить в файл или NSData
, используя NSKeyedArchiver
.
Затем вы можете воскресить объект продвижения, не обращаясь к определенному типу (X, Y, Z) по
NSData* data = ... somehow get the data from the file / CoreData etc...
Promotion* promotion = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[promotion calculatePromotion];
Для сериализации в общем, прочитайте этот документ Apple .