私のアプリケーションを64ビットに更新しています。32ビットオブジェクトから64ビットオブジェクトへの変換
すべてのオブジェクトを見てドキュメントに保存することで、ドキュメントを保存します。
32ビットオブジェクト
@interface mySquare : NSObject
@property int someInt;
@property float someFloat;
@property CGPoint beginPos;
@property CGPoint endPos;
-(void) applyStrokeTypeAndColor:(CGContextRef)context;
@end
どのように私はそれらを読むには
for (MyObjects *obj in self.objects) {
[obj archiveTo:file];
}
(抽象的な概念)を保存します(抽象的な概念)
for (int i = 0; i < cnt; i++) {
NSString *clsName = [MyObjects objectNameOfData:file];
MyObjects *obj = [NSClassFromString(clsName) new];
[obj readFrom:file];
if (self.targetView == MyView) {
[self.objects addObject:obj];
}
}
このメソッドはうまくいきます。そして、私が構築したアプリケーションのタイプのために長年にわたって素晴らしい仕事をしてきました。オブジェクトの読み込み、保存、読み込み、正しいクラス型へのキャスト
ファイルが32ビットアプリケーションで作成された場合は、「32ビット」バージョンで開きますが、正常に開きます。
64ビットに更新すると、「64ビット」で作成されたファイルは正常に開きますが、32ビットの方法で作成されたファイルは開かれません。ファイルがロードされ、情報をログアウトすると、各オブジェクトが読み込まれていることがわかりますが、進行中にデータが失われていると想定しています。あなたが上見ることができるように
64ビットオブジェクト
@interface mySquare : NSObject
@property long someInt; //was int
@property CGFloat someFloat; //was float
@property CGPoint beginPos;
@property CGPoint endPos;
-(void) applyStrokeTypeAndColor:(CGContextRef)context;
@end
は、64ビットオブジェクトで変更唯一のものは、参照タイプでした。
私は32ビットと64ビットで作成されたファイルを区別する方法を作りました。私はちょうど "myExt2"に変更したので、プログラムはどのバージョンのファイルが作成されたか知っていて、古いバージョンのアプリケーションでも新しい64ビットファイルが見えないようにします。
私は恐れていますが、私は自分のリーグから外れています。
私の32ビットファイルをキャストして(またはアプリケーションで変換して)、私の64ビットプログラムでどのように開くことができますか?レガシーファイルのサポートなしで私のアプリのアップデートを送ることはできません。
古いオブジェクトコード(intとfloat)を使用すると、64ビットアプリケーションで古いファイルが正常に読み込まれる可能性がありますか? – Losiowaty
はい、できます。 int/floatを使用すると、64ビットアプリケーションがそれらを開きます。 @losiowaty –