我在 App Store 中有一个应用程序。我正在对新版本 (1.2.0) 进行更改,当用户在 App Store 中更新应用程序时,我希望该应用程序运行一组教程。运行教程不是问题;问题是 AppDelegate 或某个地方是否有一种方法只在用户更新后第一次运行应用程序时运行?
我看过这个 SO 问题 iOS : Call a method just one time这指向 NSUserDefaults 的使用,这很好,但我将如何为特定版本号部署它,在我的情况下?
简单地说,我想运行一些代码,声明“如果用户运行 < 1.2.0 并更新到 1.2.0,则运行此代码,否则忽略”。与更新应用程序时的方式相同,有几个屏幕仅在第一次显示。
很抱歉,这是通用的,但我不完全确定我将在哪里运行这段代码。我的 Storyboard将初始 Root View Controller 设置为选项卡栏 Controller 。我可以在用户运行应用程序时显示的第一个 TableView 中设置它吗?如果是这样,我将如何着手做这样的事情?
更新: 在我的 AppDelegate didFinishLaunching 中,我放置了以下代码:
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSLog(@"Version is %@", version);
[[NSUserDefaults standardUserDefaults] setObject:version forKey:@"CFBundleShortVersionString"];
[[NSUserDefaults standardUserDefaults] synchronize];
在我的时间轴 TableView (第一个被调用的 View )的 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 时,它不播放教程。
任何指导都会非常有用。
谢谢,
最佳答案
您可以通过以下方式获取应用的版本号
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
将其保存在用户默认值中,当您更新应用程序时,它可以从用户默认值中读取最后安装的版本并做出正确 react 。
关于ios - 当用户从 App Store 更新 iOS 应用程序时运行一组快速程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665288/