2010-07-12 50 views
1

在版本1.0中,我使用的NSMutableArray和內部的我正在存儲像陣列和字典兼容性

NSMutableArray *myArray; 
for(int i= 0 ; i < 10 ; i++) 
[myArray addObject:[NSNumber numberWithInt:i]]; 

NSNumbers爲了存儲我的gameStatus。

在下一版本(1.1),但我想更新myArray的像(通過存儲裏面字典)...

NSMutableArray *myArray; 
for(int i= 0 ; i < 10 ; i++) 
{ 
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
    [dict setValue:number forKey:@"index"]; 
    [dict setValue:[NSNumber numberWithBool:NO] forKey:@"isValid"]; 
    [myArray addObject:dict]; 
    [dict release]; 
} 

我的問題是如何對以前的版本1.0提供兼容性。

在此先感謝。

更新:我支持1.1版如下所示,沒關係。

//Version 1.1 support 
//Read myArray 

      if([myArray count] > 0) 
      { 
       if(![[myArray objectAtIndex:0] isKindOfClass:[NSMutableDictionary class]]) 
       { 
        for(NSNumber *number in myArray) 
        { 
         NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
         [dict setValue:number forKey:@"index"]; 
         [dict setValue:[NSNumber numberWithBool:NO] forKey:@"isValid"]; 
         [dict release]; 
        } 
       } 
      } 

回答

1

我認爲你的觀點是,你在某些時候保存這些磁盤,並要處理升級後加載它們。有很多方法可以解決這個問題,但這裏是我爲這個特定情況推薦的內容:

  • 更改要保存的文件的名稱以包含版本號(savedata-1.1.plist)。
  • 當您啓動時,查找您的新版本文件名。如果它不存在,請查找您的舊文件名。如果存在,請使用舊規則加載它,轉換數據,使用新名稱重新保存並刪除舊文件。

這很好地進行擴展,當你到V1.2並再次更改您的數據。你將需要永遠保持你的「如何閱讀v1.0」代碼(或者至少在你完全放棄從1.0升級的支持之前),但是無論如何這是真的。