目前,我的Iphone應用程序尚未發佈。當我使用模擬器/設備時,我修改了我的應用程序以將更多緩存添加到encodeWithCode:
和initWithCoder:
。問題是,當應用程序加載時,我試圖使用一些以前不存在的編碼對象。例如:Iphone:更新後因舊的encodeObject導致應用程序崩潰
在以前的應用程序版本(如1.2),我有這個編碼:
- (void)encodeWithCoder:(NSCoder*)coder {
[coder encodeObject:myArray forKey:NCITEMTABLE_ARCHIVE_HOME_ITEMS_KEY];
}
但隨着新版本(如1.3),我用這個初始化:
- (id)initWithCoder:(NSCoder*)coder {
if (self = [super initWithCoder:coder]) {
myArray = [[coder decodeObjectForKey:NCITEMTABLE_ARCHIVE_HOME_ITEMS_KEY] retain];
myArray2 = [[coder decodeObjectForKey:NCITEMTABLE_ARCHIVE_HOME_ITEMS_2_KEY] retain];
}
return self;
}
然後應用程序會因爲找不到myArray2而崩潰。
在模擬器或測試中,我可以刪除舊版本並從新安裝。但是,我擔心,當它被釋放時,我不能告訴我的用戶刪除舊的應用程序並安裝新的應用程序。有沒有人遇到過這個問題?
因此,如果它不包含,並且您確實需要該屬性,則返回nil ?.我試圖在這種情況下返回零,但它仍然崩潰 – vodkhang 2010-08-11 09:30:15
和containsValueForKey無法檢查的情況下:我編碼的對象,但decodeInt後來 – vodkhang 2010-08-11 09:38:34
另一種情況下,我想處理的是:我有一個導航堆棧,VC A - > VC B - > VC C.如果VC C沒有initWithCoder,我仍然想要初始化VC A和VC B,這樣用戶不必再從頭開始 – vodkhang 2010-08-11 09:45:35