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{//アップグレードスクリプト}