我正在將我的應用更新爲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位創建的文件。我只是將64位文件擴展名更改爲「myExt2」,因此程序知道在哪個「版本」中創建了該文件,並防止舊版本的應用程序甚至看到新的64位文件。
恐怕我在聯盟中脫離了領域。
如何將我的32位文件(或在應用程序中轉換它們)在我的64位程序中打開?如果沒有傳統文件支持,我無法發送更新。
當使用舊的對象代碼(使用int和float)時,64位應用程序可以加載舊文件嗎? – Losiowaty
是的,它可以。如果我使用int/float,那麼64位應用程序將打開它們。 @losiowaty –