2011-10-29 24 views
3

最初のアプリの起動時に作成した「イントロ」ペンを表示したい。最初のアプリの起動時に.nibをロードする

私はviewDidLoadに次のコードを使用していましたが、(ViewWillAppearでも)何もしないようです。私はきれいにして、シミュレータとデバイスからアプリケーションを削除して再ビルドしようとしましたが、何も起こりませんでした。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if (![defaults objectForKey:@"firstRun"]){ 
     IntroViewController *intro = [[IntroViewController alloc] initWithNibName:nil bundle:nil]; 

     intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ; 
     [self presentModalViewController:intro animated:YES]; 

     [intro release]; 

     [defaults setObject:[NSDate date] forKey:@"firstRun"]; 

    } 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

私はまた、最初の起動時に少しUIAlertViewを表示しようとした、そしてそれは働きます!ペン先をロードできないのですか?

EDIT

は、私はそれがタブバーベースのアプリだと言うのを忘れて、私はアプリの最初の3つのセッションで行をハイライトするために私のアプリデリゲートにいくつかのコードをしました。 何か助けに感謝します!

+0

http://stackoverflow.com/questionsの可能性のある重複同様に、このようなようになる時間/ 2487541/presentmodalviewcontroller-not-working – djromero

+1

そう考えてはいけません。 – Phillip

答えて

3

[OK]を、次のコードを追加し、それが動作するはずです:

- (void)Loadview_afterdelay{ 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if (![defaults objectForKey:@"firstRun"]){ 
    IntroViewController *intro = [[IntroViewController alloc] initWithNibName:nil bundle:nil]; 

    intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ; 
    [self presentModalViewController:intro animated:YES]; 

    [intro release]; 

    [defaults setObject:[NSDate date] forKey:@"firstRun"]; 

     } 

    [[NSUserDefaults standardUserDefaults] synchronize]; 

} 


- (void)viewDidLoad { 

[self performSelector:@selector(Loadview_afterdelay) withObject:nil afterDelay:0.5]; 

} 

どうやら、この場合には、あなたのビューがロードされた直後に2番目のビューをロードすることはできません(のviewDidLoad) そのため、あなただけの設定2番目のビューを読み込む前に小さな遅延が発生します。

+0

ありがとう!正常に動作します! – Phillip

0

viewDidAppearに移動しようとしましたか?

+0

はい、私はしましたが、何も起こらなかった! – Phillip

+0

私はあなたのコードを - (void)viewDidAppear:(BOOL)animated(スペルをチェックして、アプリのデフォルトをリセットすることを忘れないでください。 "あなたのテストで) – djromero

+0

試しましたが、何も起こった – Phillip

1

は、以下のことを試してみてください。

IntroViewController *intro = [[IntroViewController alloc] initWithNibName:@"IntroViewController" bundle:nil]; 

    intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ; 
    [self presentModalViewController:intro animated:YES]; 

    [intro release]; 

あなたはiOSの5(およびARC)を使用している場合、私は、またinitWithNibName

にご.nib名を追加した、あなたはこれを使用する必要がありますそれはあなたがあなたのAppDelegateでそのコードを置くべきであると私には見えます

IntroViewController *intro = [[IntroViewController alloc] initWithNibName:@"IntroViewController" bundle:nil]; 

    intro.modalTransitionStyle = UIModalTransitionStyleCoverVertical ; 
    [self presentModalViewController:intro animated:YES completion:nil]; 
+0

私はiOS 5を使用しているので、私は2番目の方法を試みたが、まだ何も.."可能な重複 "の質問を読んで、私はビューをプッシュするUINavigationControllerを作成する必要があります最初の打ち上げ時に? – Phillip

+0

ロードしようとしているペン先にクラスが設定されているかどうかを確認できますか? 「Interface Builder」(nibエディタ)に進み、「ファイルの所有者」を選択し、「右側面図」(別名:ユーティリティ)の3番目のタブに移動して確認できます。あなたのケースでは、テキストフィールド 'Class'はIntroViewControllerでなければなりません。 – Louis

+0

はい、それは私がボタンからプッシュすると、それはうまくプッシュしたので、持っています。しかし、私が最初のアプリケーションの起動時にそれを表示しようとすると、何もプッシュしません – Phillip

0

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
// Override point for customization after application launch. 
// Modify the code above to what you need. 
self.window.rootViewController = self.viewController; 
[self.window makeKeyAndVisible]; 
[application setStatusBarHidden:YES withAnimation:NO]; 
return YES; 
} 

あなたのアプリケーションにどのようなビューを開始するかを伝えることがあります。 初めての場合、firstTimeViewControllerがあります。 ここで行っている場合は、遷移をアニメートしないでください。 遷移をアニメーション化するだけです。


ブレークポイントを設定して、viewDidLoadメソッドに入るかどうかを確認し、そうであればテストが適切かどうかを確認します。
おそらくNSNumberのBOOLを使って再度チェックすることをお勧めします。

さらに、viewDidAppearにそのオプションを配置することもできます。

+0

UhmはTabBarベースのアプリケーションなので動作していないようです。私はすでに、アプリケーションの最初の3セッションのために何かをするNSUserDefaultsコードを持っています。 – Phillip

+0

あなたはアプリケーションのワークフローをよりよく定義することができます。そのようなことがいつ表示されるか、1つのタブでタブコントローラー上に表示するなど。 –

+0

したがって、私のアプリケーションは4つのタブバーで構成されていますタブ。最初のものは歓迎されたもので、そこには "イントロ"ビュー(すべての指示あり)を押し上げるボタンがありました。ユーザーが最初にアプリを起動するとすぐにイントロビューを表示したい! – Phillip

0

すでに@Louisはすでによく質問に答えていますが、唯一のことです。[リリース]があるのでARCと互換性がありません。私が今書いているものは新しいものではありませんが、もっと宣言します初心者のもの。

まず、RootViewControllerにTourGuideViewController.hをインポートする必要があります。

#import <UIKit/UIKit.h> 
#import "TourGuideViewController.h" 

@interface RootViewController : UITabBarController 
{ 
    TourGuideViewController *TourGuideViewController; 
} 

@property (nonatomic, strong) TourGuideViewController *TourGuideViewController; 

@end 

その後、あなたはあなたのRootViewController.mファイルにあなたの関数を合成して実装する必要があります:

#import "RootViewController.h" 

@interface RootViewController() 

@end 

@implementation RootViewController 

@synthesize TourGuideViewController = _TourGuideViewController; 

- (void)viewDidLoad 
{ 
    [self performSelector:@selector(LoadTourGuide) withObject:nil afterDelay:0.5]; 
} 

- (void)LoadTourGuide{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    if (![defaults objectForKey:@"FirstRun"]){ 
     TourGuideViewController *TourGuideVC = [self.storyboard instantiateViewControllerWithIdentifier:@"TourGuideViewController"]; 
     TourGuideVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
     [self presentViewController:TourGuideVC animated:YES completion:NULL]; 

     [defaults setObject:[NSDate date] forKey:@"FirstRun"]; 
    } 

    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

@end 
+0

あなたは** TourGuideViewController **がStoryboardにあり、* TourGuideViewController *のStoryBorad ID **を持っていることを忘れてはいけません。** RootViewController:UITabBarController **から呼び出しています – Ashoor

関連する問題