iPhone/iPadアプリケーション開発データベースのアップグレード

2678 ワード

APP    QQ :347072638

データベースをアップグレードする理由
需要の変動や増加により、従来のデータベース構造設計は既存の需要を満たしていない(もちろん、最初から考慮すれば、データベースのアップグレードは余計なことになる).
データベースがアップグレードされたオブジェクト?1、ユーザーは既に旧製品を使用しており、新製品を更新する必要がある場合(ユーザーがAppを削除せず、AppStore updateを直接通過することを前提とする).2、このアプリを初めてダウンロードしてインストールするにはアップグレードする必要はありません(なぜか知っていれば、後ろを見てください).3、Appを削除し、再ダウンロードしてインストールする場合、アップグレードする必要はありません.理由は2です.
難点?
バージョンが多く、アップグレード回数が多く、ユーザーが使用しているバージョンが不確定で、一歩一歩アップグレードする必要があります.
どのように実現しますか?まず、ユーザーが現在使用しているバージョンがどのバージョンなのかを知る必要があります.これは仕方なく、古いバージョン番号を保存してこそ実現できます.その後、アップグレード時に古いバージョン番号を読み出し、古いバージョンがそのアップグレード場所にあると判断し、上記のアップグレードを実行するsqlスクリプトを実行します.アップグレードのたびに対応するスクリプトがあり、ロー・バージョンからハイ・バージョンにアップグレードするたびに各スクリプトが1回走ります(これには問題があり、時間がかかり、ユーザーを待たせる必要があります.この場合、ユーザーが突然アップグレードを中断したらどうするかも考えられます.電源が切れ、メモリが不足し、ホーム・キーを手で押すなど).
コード例//DBが存在しない場合は//NSUserDefaults*userDefaults=[NSUserDefaults standardUserDefaults];    if (!dba._bIsExistDB) {         NSString *version = [pVersionArray lastObject];         [userDefaults setObject:version forKey:@"old_version"];         [userDefaults synchronize];         return YES; }//DBが存在し、データベースアップグレードNSString*version=[pVersionArray lastObject];    NSString *oldVersion = [userDefaults objectForKey:@"old_version"];     if (![version isEqualToString:oldVersion]) {         [self upGradeDB];         [userDefaults setObject:version forKey:@"old_version"];         [userDefaults synchronize];     } -(void)upGradeDB {     SEL pfunc1 = @selector(upgrade200);     NSNumber *num1 = [[NSNumber alloc] initWithInt:(int)pfunc1];     NSArray *_pArraAyFun = [NSArray arrayWithObjects:num1, nil];     [num1 release];     NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];     NSString *oldVersion = [userDefaults objectForKey:@"old_version"];     NSInteger nCurrect = [pVersionArray count];     if ([oldVersion isKindOfClass:[NSNull class]]         || oldVersion == nil         || [oldVersion isEqualToString:@""]) {         nCurrect = 0;     }else     {         NSInteger i = 0;         for (NSString *version in pVersionArray) {             if ([version isEqualToString:oldVersion]) {                 nCurrect = i;                 nCurrect++;                 break;             }             i++; }if(i>=[pVersionArray count]){//現在最も近いバージョンnCurrect=iをバージョン番号に基づいて調整します.        }     }     for (NSInteger index = nCurrect; index < [pVersionArray count]; index++) {         SEL pFunc = (SEL)[[_pArraAyFun objectAtIndex:index] intValue];         [self performSelector:pFunc]; }}-(void)upgrade 200{//アップグレードスクリプト}