我在App Store中有一个应用程序。我正在对新版本(1.2.0)进行更改,当用户在App Store中更新应用程序时,我希望应用程序运行一组教程。运行教程不是问题;问题是AppDelegate中是否存在一个方法,或者只是在用户第一次更新后运行应用程序时才会运行该方法?
我已经看到了这个问题iOS : Call a method just one time,它指出了NSUserDefaults的使用,这很棒,但是如何针对特定的版本号和我的情况进行部署呢?
简单地说,我想运行一些代码来说明"如果用户正在运行< 1.2.0并更新到1.2.0,运行此代码,否则忽略"。更新应用程序的方式相同,有几个屏幕只显示第一次。
对不起,这是通用的,但我不完全确定在哪里运行此代码。我的故事板将初始根视图控制器设置为选项卡栏控制器。我可以在用户运行应用程序时显示的第一个表视图中设置此项吗?如果是这样,我将如何做这样的事情?
更新: 在我的AppDelegate didFinishLaunching中,我输入了以下代码:
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSLog(@"Version is %@", version);
[[NSUserDefaults standardUserDefaults] setObject:version forKey:@"CFBundleShortVersionString"];
[[NSUserDefaults standardUserDefaults] synchronize];
在我的时间轴表视图(被调用的第一个视图)中,在viewDidLoad中,我把:
self.appVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"CFBundleShortVersionString"];
if ([self.appVersion isEqualToString:@"1.2.0"])
{
if ([TutorialViewController hasSeenTutorial] == NO)
{
NSArray *tutorialImages = [[NSArray alloc] init];
tutorialImages = @[[UIImage imageNamed:@"TimelineTut.png"],
[UIImage imageNamed:@"Tut 1.png"],
[UIImage imageNamed:@"Tutty 2.png"],
[UIImage imageNamed:@"newtut3.png"],
[UIImage imageNamed:@"newnewtut4colors.png"],
[UIImage imageNamed:@"newtut5.png"],
[UIImage imageNamed:@"tut 6.png"]];
TutorialViewController *tutorial = [[TutorialViewController alloc] initWithImages:tutorialImages];
[self presentViewController:tutorial animated:YES completion:nil];
[TutorialViewController setHasSeenTutorial:YES];
}
}
但是当我从1.1.0更新到1.2.0时,它并没有播放教程。
任何指导对此都非常好。
谢谢,
答案 0 :(得分:2)
您可以使用
获取应用的版本号NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
将其保存在用户默认值中,当您更新应用程序时,它可以从用户默认值中读取上次安装的版本并做出正确反应。
答案 1 :(得分:1)
您可以使用NSUserDefaults检查应用程序是否已在此版本中首次运行,然后执行教程代码。