我有几行代码只在第一次在didFinishLaunchingWithOptions方法中启动应用程序时调用一次,但现在问题是我需要在新版本的应用程序中调用该部分代码,因为我在那里做了一些更改。我们知道在更新时不会删除默认值,因此更好地修复它。这是我的代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if(![fn chkAppRunningFirstTime])
{
[fn createFolder:@"productImages"];
[fn addSkipBackupAttributeToItemAtURL:@"productImages"];
[fn createFolder:@"productImages/thumb"];
[fn createFolder:@"productImages/medium"];
[fn createFolder:@"productImages/large"];
[db executeQuery:"drop table productImgTbl;"];
[db executeQuery:"create table productImgTbl ('no' INTEGER PRIMARY KEY AUTOINCREMENT, 'img_name' text, 'img_url' text);"];
}
return YES;
}
fn是我的功能类,我可以这样保存价值。
- (BOOL)chkAppRunningFirstTime
{
return [defaults boolForKey:@"firstTime"];
}
- (void)setFirstTime:(BOOL)val
{
[defaults setBool:val forKey:@"firstTime"];
[defaults synchronize];
}
任何形式的建议都会被适用。感谢
答案 0 :(得分:1)
为此,您可以在应用中存储以前的版本号。从技术上讲,您可以保存应用程序的当前版本号(您可以从信息播放器中获取)以获取关键的先前版本。然后,您可以在首次启动时检查先前版本是否与当前版本匹配。如果不匹配,您就知道自己是新版本。使用当前版本更新Userdefaults中的先前版本密钥。
答案 1 :(得分:1)
对我而言,你的逻辑有点落后。
- (BOOL)chkAppRunningFirstTime
{
return [defaults boolForKey:@"firstTime"];
}
此方法将逻辑上相反的值返回给方法名称。当它第一次返回NO
...
- (void)setFirstTime:(BOOL)val
{
[defaults setBool:val forKey:@"firstTime"];
[defaults synchronize];
}
此方法不应采用参数。它只能是第一次,因此设置标志始终具有相同的值。
由于逻辑是向后的,您最好更改所使用密钥的名称,例如更改为initialisationHasExecuted
。
唯一需要考虑的是版本号。您是否需要在将来的版本中运行其他更新代码?应该如何处理这个?