[英]Converting 32 bit objects to 64 bit objects
我正在將我的應用程序更新為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位程序中打開? 沒有舊文件支持,我無法發送我的應用程序更新。
從評論中我們知道,當使用32位應用程序版本中的代碼時,64位應用程序可以很好地打開舊文件。 我建議您保留舊代碼,將類重命名為mySquareOld
。 然后,只要您的用戶嘗試打開舊文件,請執行以下操作:
mySquareOld
轉換為mySquare
mySquare
保存在相同的文件名下,但具有新的結構。 對象反序列化后,第二步應該很容易,因為int
和float
應該分別適合long
和CGFloat
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.