小智 6
捆绑版本并将其保存在用户默认值中.
编辑:
这里有三件事需要注意.
捆绑版本:这是您要发布的应用程序的版本.
旧版本:这将指示您的应用程序的先前版本.我们将其存储在用户默认值中,以便我们在更新应用程序时知道旧版本的内容.如果你的捆绑版本是1.0,这显然是零.
目标版本:这表示用户定位的版本.我们稍后会讨论这个问题.
所以,条件如
bundleVersion > oldVersion 要么
if(isVersionBetter:myBundleVersion thanVersion:oldVersion)
Run Code Online (Sandbox Code Playgroud)
或者意味着我们要创建我们的数据库(在这种情况下,捆绑版本将是1.0,旧版本将是零)或更新我们的数据库(在这种情况下捆绑版本将大于1.0,因此旧版本将不是零) .
因此,正如我们所看到的,创建数据库意味着用户第一次安装应用程序.更新数据库意味着用户已经安装了应用程序并正在更新数据库.
但是,如果您想更新应用程序并希望保持数据库不变,可能还会出现这种情况.也就是说,只有UI更新.
在这里,目标版本出现了.
如上所述,目标版本是用户定位的版本.如果用户定位捆绑包版本,则所有操作都与上述相同.但是如果用户的目标是捆绑版本之外的其他版本,我们将跳过数据库更新部分,从而只允许更改UI.
所以,最后的陈述是这样的:
if( bundleVersion == targetVersion AND bundleVersion > oldVersion ) {
// Either create or update the database.
}else {
// Do nothing. Skips database updating and allows UI update.
}
Run Code Online (Sandbox Code Playgroud)
因此,您的数据库函数看起来像这样
-(void) initWithTargetVersion:(NSString *) targetVersion {
NSString *oldDatabaseVersion = [[NSUserDefaults standardUserDefaults] stringForKey:@"OldDatabaseVersion"];
NSString *bundleDatabaseVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
if([bundleDatabaseVersion isEqualToString:targetVersion] && [self isVersionBetter:oldDatabaseVersion new:targetVersion]) {
// Create or update the database.
}else {
// Do nothing.
}
}
Run Code Online (Sandbox Code Playgroud)
用户将如何传递目标版本,如下所示:
[[DatabaseManager sharedManager] initWithTargetVersion:@"1.0"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |