Ios 如何在新版本的应用程序中调用方法?

Ios 如何在新版本的应用程序中调用方法?,ios,iphone,default,Ios,Iphone,Default,我有几行代码,在didFinishLaunchingWithOptions方法中第一次启动应用程序时只调用了一次,但现在的问题是,我需要在新版本的应用程序中调用这部分代码,因为我在那里做了一些更改。正如我们所知,更新时不会删除默认值,所以哪种方法更适合修复它。这是我的代码 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if

我有几行代码,在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];
}

任何形式的建议都会被采纳。谢谢,您可以在应用程序中存储以前的版本号。从技术上讲,您可以将应用程序的当前版本号(您可以从info plist获取)保存为关键的早期版本。然后,您可以在第一次启动时检查以前的版本是否与当前版本匹配。如果不匹配,则表示您是新版本。将Userdefaults中以前的版本密钥更新为当前版本,完成。

对我来说,您的逻辑有点倒退

- (BOOL)chkAppRunningFirstTime
{
    return [defaults boolForKey:@"firstTime"];
}
此方法返回与方法名称逻辑相反的值。当它是第一次返回时,
NO

- (void)setFirstTime:(BOOL)val
{
    [defaults setBool:val forKey:@"firstTime"]; 
    [defaults synchronize];
}
此方法不应采用参数。这只能是第一次,因此设置标志始终具有相同的值

由于逻辑是反向的,因此最好更改所用密钥的名称,例如更改为
initialisationhassecuted


唯一需要考虑的是版本号。您是否需要在将来的版本中运行其他更新代码?如何处理这个问题?

不,我正在改变这个版本中的代码。在未来版本中,我没有简单的改变代码。但是,你需要考虑所有的升级路径。比较第一次安装应用程序的人和从当前(或旧)版本升级应用程序的人。但是关于参数的第二件事,我确信它采用了parameter,因为我是这样分配的[fn setFirstTime:YES]。每次发布应用程序时,版本号都会更改。您可以将其存储为用户默认值。然后检查号码是否已更改。您还可以使用一种方法来检查安装的最新版本,并为每个发布的版本号运行升级方法。因此,您不需要删除任何升级代码,只需不断添加代码并检查应该运行的代码。版本号不是int,而是float。您可以通过安装应用程序,然后更改版本号并再次运行来运行测试。添加日志或调试以检查发生的情况。