2013-10-15 11 views
5

このサイトの新品、かなり素人な知識がここにあります!数週間前に自分自身を教え始めました。かなり堅実なiPhoneアプリを手に入れましたが、私が実装したい最後の機能は次のとおりです。iOS初回ツアー - アプリが初めて起動するかどうかを検出する

「初回起動のみ」ガイドツアーを作成します。

私が知りたいことは、 ユーザーが最初にアプリケーションを起動した場合、どのようにしてボタンをタップしなくても、初期ビューコントローラではない新しいビューコントローラにビューをリダイレクトすることができます。

私が理解している最初の起動を検出するためのチュートリアルを読んでください。 Iveはまた、いくつかのチュートリアルを読んで、本の中のすべてを試して "performSegueWithIdentifier"を試してみましたが、何も私のために働いていません!

おそらく私はXcode 5を使用しており、iOS 7でテストしているからです。 誰かが私を助けることができれば、私は永遠に感謝しています!あなたが[[NSUserDefaults standardDefaults] registerDefaults:]を使用して、任意のデフォルトを登録していない場合は、そのキーが存在しないよう

(void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"]) { 
    } 
    else { 
     // Place code here 
     self.view.backgroundColor = [UIColor redColor]; 

     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    }  

    // Do any additional setup after loading the view, typically from a nib. 
} 
+0

何を試しましたか?たぶん私たちにいくつかのコードを示すかもしれない。あなたは何をしていないのですか?あなたが与えることができる詳細をもっと、私たちはあなたを助けるために用意されています。 – neilco

+0

私は自分のメイン・ポストに私がviewcontroller.mファイルに追加したものを追加しました。それはうまく動作しますが、代わりのビューコントローラーを開くために、ここに "// Place code here"の部分を置くのはどうか分かりません。 – Luke

+0

私はまた、セグを作成し、このコードを "//ここにコードを置く"と書いてコードを使ってプログラムでプッシュしようと試みました。 [self performSegueWithIdentifier:@ "ツアー"送信者:自己]; 私のsegueは "Tour"という名前になっています – Luke

答えて

6

、あなたが呼んで初めて[[NSUserDefaults standardDefaults] boolForKey:@"FirstLaunch"]あなたはNOを受け取ることになります。

私はそれはそれはNOを返すかどうかをチェックし、最初の起動シーケンスを実行の問題だ、などhasPerformedFirstLaunchとして、より多くのセマンティックキー名を使用することを好む:ここ

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasPerformedFirstLaunch"]) { 
     // On first launch, this block will execute 

     // Set the "hasPerformedFirstLaunch" key so this block won't execute again 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasPerformedFirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    else { 
     // On subsequent launches, this block will execute 
    }  

    // Do any additional setup after loading the view, typically from a nib. 
} 
+0

コードには比較的新しいので、あまりにも助けになりますが、それを区別することは単に大きな助けになります。これで、最初の起動を認識してその情報を保存する方法を確立したので、プログラムで他のView Controllerとセグを実行する方法は?私は 'performseguewithidentifier'を使用しようとしましたが、何も起こりません! – Luke

+0

私はストーリーボードをあまり使わないので試してみませんでしたが、 'viewWillAppear:'で最初の起動チェックを行い、セグを実行する方がよいでしょう。 'performSegueWithIdentifier:'は動作するはずです。 – neilco

+0

私はviewWillAppearとviewDidLoadでinを使用しようとしましたが、何も起こりません。それは何も引き起こされません! – Luke

1

は、ガイド付きツアー源https://github.com/sofienazzouz/Guided-Tourですあなたの代理人からガイド付きツアーを呼び出したい場合は、今、あなたはこの

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

//// initialize your initialViewController here however you want 
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"knewOrRecentUser"]) { 
     self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.initialViewController]; 
    } else { 
     [[NSUserDefaults standardUserDefaults] setObject:@"old" forKey:@"knewOrRecentUser"]; 
     GuidedTourViewController *guideTour = [[GuidedTourViewController alloc] init]; 
     self.navigationController = [[UINavigationController alloc] initWithRootViewController:guideTour]; 
    } 
[self.window setRootViewController:self.navigationController]; 
} 
1

neilco

のようにそれを呼び出す必要があります

あなたが提供したことは機能しますが、APPの初回起動時に画面を赤色(またはあなたが好きな色)にするコードを省略しました。

これはあまり好きではないかもしれませんが、初心者がベンチャーを通るときは、できるだけ多くの情報を提供して、何が起きているのかを理解できるようにすることが最善です。はい、私を含んでいます! < < =初心者

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"hasPerformedFirstLaunch"]) { 
     // On first launch, this block will execute 
     // Place code here 
     self.view.backgroundColor = [UIColor redColor]; 

     // Set the "hasPerformedFirstLaunch" key so this block won't execute again 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasPerformedFirstLaunch"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    else { 
     // On subsequent launches, this block will execute 
    } 

    // Do any additional setup after loading the view, typically from a nib. 
} 
関連する問題