2014-03-26 1 views
0

App Store에 응용 프로그램이 있습니다. 새 버전 (1.2.0)을 변경하고 사용자가 App Store에서 앱을 업데이트하면 앱에서 일련의 자습서를 실행하기를 원합니다. 자습서를 실행하는 것은 문제가되지 않습니다. 그것은 AppDelegate 또는 어딘가에 사용자가 업데이트 후 앱을 처음 실행할 때만 실행되는 메소드가 있는지 의문입니다.사용자가 App Store에서 iOS 앱을 업데이트 할 때 빠른 절차 집합을 실행하십시오.

나는이 질문을 NSUserDefaults의 사용을 가리키는 iOS : Call a method just one time으로 보았습니다. 그러나 그것은 훌륭합니다. 그러나 특정 버전 번호와 제 경우에는 어떻게 배치할까요?

간단히 말해서, "사용자가 < 1.2.0을 실행하고 1.2.0으로 업데이트하고,이 코드를 실행하고, 그렇지 않으면 무시합니다."라는 코드를 실행하고 싶습니다. 앱을 업데이트 할 때와 마찬가지로 처음 몇 가지 화면 만 표시됩니다.

미안하지만이 코드는 어디에서 실행해야 할 지 잘 모르겠습니다. 내 스토리 보드에는 초기 루트보기 컨트롤러가 탭 막대 컨트롤러로 설정되어 있습니다. 사용자가 앱을 실행할 때 표시되는 첫 번째 표보기에서 이것을 설정할 수 있습니까? 그렇다면 어떻게 그런 일을 할 것인가?

가 UPDATE : 내 AppDelegate에 didFinishLaunching에서 , 나는 다음과 같은 코드를 넣어 다음의 viewDidLoad에서, 내 타임 라인 테이블보기 (호출되는 첫 번째보기)에서

NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 
NSLog(@"Version is %@", version); 

[[NSUserDefaults standardUserDefaults] setObject:version forKey:@"CFBundleShortVersionString"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

를, 내가 넣어 :

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

Thanks @ TheEye - 이것은 매우 도움이됩니다. AppDelegate의 didFinishLaunchingWithOptions에이 코드를 만들고 NSUserDefaults에 설정하고 검사를 수행하는 가장 논리적 인 장소로 넣을까요? – amitsbajaj

+0

AppDelegate 또는 사용자가 표시 한 첫 번째보기에서 - 자습서를 실행할시기에 따라 다릅니다. 백그라운드에서 첫 번째보기를 표시하고 예를 들어 상단에있는 대화 상자에서 자습서를 실행할지 묻는 것이 좋습니다. – TheEye

+0

그건 정말 도움이되는 @ TheEye이고 치료법처럼 작동합니다. 지금 일어나고있는 유일한 일은 멀티 태스킹에서 앱을 닫고 다시 열면 NSUserDefaults에서 읽으므로 "튜토리얼"을 다시 실행한다는 것입니다. 그래서 내 AppDelegate에서 위의 코드에 따라 NSUserDefaults 버전을 저장하고 첫 번째보기 (타임 라인)에서 NSUserDefaults를 호출하고 버전 isEqualToString : @ "1.2.0"을 실행하면 NSUserDefaults가 실행됩니다 튜토리얼 .. 내가 왜 입문서가 계속 불려지는지 논리적으로 이해하고 있지만, 단지 처음에만 전화하는 방법은 확실하지 않습니까? – amitsbajaj

1

NSUserDefaults를 사용하여 응용 프로그램이이 버전에서 처음 실행되었는지 확인한 다음 자습서 코드를 수행 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다 @iamluke - 내 질문을 업데이 트했지만 애플 리케이션을 업데이 트하면 자습서 ins't 실행 - 당신은 이것에 어떤 아이디어가 있습니까? 감사합니다 – amitsbajaj

+0

안녕하세요, 코드 붙여 넣기 용서해 주셔서 감사합니다하지만 난 잠자리에 드는거야! 그러나이 같은 일을 http://pastebin.com/wbpb8504 – iamluke

+0

코드 iamluke에 대한 많은 감사합니다 - 어느 정도 작동하지 및 코드와 선택한 대답의 조합을 사용해야했습니다. 이 작업에 많은 감사를드립니다. 정말 감사드립니다! – amitsbajaj