我在App Store中有一个应用程序。我正在对新版本(1.2.0)进行更改,并且当用户更新App Store中的应用程序时,我希望该应用程序运行一组教程。运行教程不是问题;这是在AppDelegate中有没有一个方法,或者只有在用户更新后才运行应用程序的第一次运行的地方?当用户从App Store更新iOS应用程序时运行一组快速程序
我看过这个问题iOS : Call a method just one time哪个指向NSUserDefaults的使用,这很好,但是我将如何为特定的版本号和我的情况部署?
简而言之,我想运行一些代码,指出“如果用户运行< 1.2.0并更新到1.2.0,则运行此代码,否则忽略”。在更新应用程序时也是如此,有几个屏幕只显示第一次。
对不起,这是通用的,但我不完全确定我会在哪里运行此代码。我的故事板将初始根视图控制器设置为Tab Bar Controller。我可以在用户运行应用程序时显示的第一个表格视图中进行设置吗?如果是这样,我会如何去做这样的事情?
UPDATE: 在我的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时,它不会播放教程。
任何指导将会非常棒。
感谢,
您不需要将版本保存为用户默认值,您始终可以从捆绑包中获取该版本。你确定版本字符串正好是1.2.0吗?它是否适用于旧应用版本的AdHoc新应用安装? – TheEye
你的“hasSeenTutorial”函数可能会在用户默认值中设置一个标志(然后同步)?这应该不是一个布尔值,但版本号,否则下一个应用程序更新将看到“hasSeenTutorial”=真... – TheEye
谢谢@TheEye - 你是正确的,hasSeenTutorial布尔值,我将它更改为版本号那就是诀窍。现在,当我从应用程序商店下载应用程序,然后使用Xcode将其更新到1.2.0时,它将播放本教程。非常感谢您的帮助! – amitsbajaj