3

「プロモーション」のサポートが必要なアプリを作成しています。これらのプロモーションは任意に複雑になる可能性があり、さまざまなデータが計算に関連する可能性があります。したがって、開発の初期段階では、これらの仕様スキーマ全体を発明したくはありません。Objective-Cでそれぞれを記述し、コンパイルされたコードを(CoreData)データベースにシリアル化するだけです。後で呼び出して実行するため。

これはどうにか可能ですか?GCDブロックは、これに適した候補になるのではないかと考えていましたが、それらをシリアル化/逆シリアル化するためのすぐに使用できる方法はわかりません。

アドバイスありがとうございます。

編集:これはiPhoneアプリなので、残念ながらPython関数のピクルスのようなものを使用することはできません...それはまっすぐなObjective-Cでなければなりません...

4

1 に答える 1

4

ブロックをシリアライズすることはできないと思います。

データをクラスにカプセル化し、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 docをお読みください。

于 2010-07-24T17:35:51.513 に答える