2014-03-26 27 views
0

我在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时,它不会播放教程。

任何指导将会非常棒。

感谢,

+0

您不需要将版本保存为用户默认值,您始终可以从捆绑包中获取该版本。你确定版本字符串正好是1.2.0吗?它是否适用于旧应用版本的AdHoc新应用安装? – TheEye

+0

你的“hasSeenTutorial”函数可能会在用户默认值中设置一个标志(然后同步)?这应该不是一个布尔值,但版本号,否则下一个应用程序更新将看到“hasSeenTutorial”=真... – TheEye

+0

谢谢@TheEye - 你是正确的,hasSeenTutorial布尔值,我将它更改为版本号那就是诀窍。现在,当我从应用程序商店下载应用程序,然后使用Xcode将其更新到1.2.0时,它将播放本教程。非常感谢您的帮助! – amitsbajaj

回答

2

你可以得到一个应用程序的版本号

NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 

将它保存在用户的默认值,当你更新的应用可以读取用户的最后安装的版本默认并正确反应。

+0

谢谢@TheEye - 这非常有帮助。我会把这个放在AppDelegate的didFinishLaunchingWithOptions中作为创建这个代码的最合理的地方,将它设置在NSUserDefaults中并执行检查? – amitsbajaj

+0

无论是在您的AppDelegate中,还是在您展示的第一个视图中 - 取决于您何时运行教程。例如,您可能想要在后台显示第一个视图,并询问用户是否希望在对话框中运行教程。 – TheEye

+0

@TheEye真的很有用,而且工作起来就像一种享受。现在唯一发生的事情是,如果我从Multitasking关闭应用并重新打开它,它将再次运行“tutorial”,因为它正在读取NSUserDefaults。因此,在我的AppDelegate中,我按照上面的代码将代码保存到NSUserDefaults中,并在第一个显示的视图(时间轴)中为该键调用NSUserDefaults,如果版本为isEqualToString:@“1.2.0”,它会运行教程..我逻辑上理解为什么教程不断调用,但不知道如何只有它第一次调用? – amitsbajaj

1

您可以使用NSUserDefaults来检查应用程序是否已在此版本中第一次运行,然后执行教程代码。

+0

感谢您的回复@iamluke - 我更新了我的问题,但在更新应用程序时,教程不会运行 - 您对此有何看法?谢谢 – amitsbajaj

+0

嗨,原谅我只是粘贴代码,但我即将睡觉!然而,像这样的东西应该可以运行http://pastebin.com/wbpb8504 – iamluke

+0

非常感谢代码iamluke - 这在某种程度上确实起作用,我不得不使用代码和选定答案的组合。非常感谢您对此的工作 - 我非常感谢! – amitsbajaj

相关问题