iPhone/iPad应用开发数据库升级
2012-03-12 18:03
274 查看
APP开发技术QQ群:347072638
为什么数据库要升级?
由于需求变动或增加,原来的数据库结构设计不满足现有的需求(当然,如果一开始就考虑到了,那数据库升级就是多此一举了)。
数据库升级的对象?
1、用户已经在使用旧产品,新产品需要更新的情况下(前提是用户不删除App,而是直接通过AppStore update)。
2、第一次下载安装此app不需要升级(知道为什么的话,请看后面)。
3、删除App,重新下载安装的不需要升级,理由如2。
难点?
版本比较多,升级次数比较多,用户使用的版本不确定,需要一步一步升级上去。
如何实现?
首先要知道用户当前使用的是哪一个版本,这个没办法,只有保存旧版本号才能实现。,然后在升级时读出旧版本号,判断旧版本是处在那一个升级处,然后在执行以上升级处的sql脚本。
每次升级都有对应的脚本,如果 从低版本升级到高版本时每一个脚本都要跑一遍(这就有一个问题,要花时间,让用户等待。此时还要考虑如果用户突然中断升级怎么办?断电,内存不足,手按Home键等)。
代码示例
//如果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)upgrade200
{
//升级脚本
}
相关文章推荐
- iPhone与iPad开发实战——iOS 经典应用剖析--视频
- ipad iphone 开发的应用,加一个启动预览图片
- iOS开发人员必备App开发工具 ifunbox 支持iPhone, iPad和iPod Touch的文件及应用管理神器 使用实例
- iphone/ipad应用的升级更新提醒和评分提醒
- (iPhone/iPad开发)iOS应用检查更新的最优方法
- 疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础
- iPhone与iPad开发实战——iOS 经典应用剖析(更新完成)
- Iphone 开发: PLdatabase 数据库应用步骤 (PlausibleDatabase)
- iPhone iPad游戏应用开发视频教程
- 疯狂iOS 讲义(上) Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧)
- iOS 7 iPhone iPad应用开发技术详解
- 《疯狂iOS讲义(下)——iPhone/iPad高级应用与手游开发(含CD光盘1张)》
- iphone/ipad应用的升级更新提醒和评分提醒
- iphone ipad 开发应用内实现多语言自由切换
- iPhone与iPad开发实战——iOS 经典应用剖析视频--观看地址
- 北京立方网招聘 iPhone/iPad 应用/游戏 开发工程师
- 新书介绍:iPhone&iPad企业移动应用开发秘籍
- 《iOS6编程揭秘-iPhone与iPad应用开发入门(第二版)(配光盘)》
- iPhone与iPad开发实战——iOS 经典应用剖析视频--观看地址