1

ユーザー「Flocked」と同様の問題があります(ここで質問を参照してください:AppDelegateのapplicationDidFinishLaunchingから他のビューをロードしてください)が、彼の投稿を読んだ後、どうにかして解決できませんでした。おそらく私の状況は彼とは異なります。

didFinishLaunchingWithOptionsアプリケーションが初めて実行されたかどうかを確認するためのルーチンを内部に持っています(これも別のユーザーから取得しました):

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

    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"]) {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"everLaunched"];
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstLaunch"];
    }
    else{
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
    }
    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {

        NSLog(@"First run");
    }

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

InfoViewfirstLaunch が発生した場合、別のビュー (セットアップ用のビュー) を読み込めません。私が試してみました:

InfoView *infoView = [[InfoView alloc]init];
[self presentViewController:infoView animated:YES completion:nil];

中身if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"])

しかし運がない。アイデアや助けはありますか?

4

2 に答える 2

2

これを試して:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    if (![defaults boolForKey:@"everLaunched"]) {
        NSLog(@"First run");
        [defaults setBool:YES forKey:@"everLaunched"];
        InfoView *infoView = [[InfoView alloc]init];
        [self.viewController presentViewController:infoView animated:YES completion:nil];    
    }

    return YES;
}
于 2012-11-23T16:00:10.507 に答える
0

[self presentViewController:infoView animated:YES completion:nil];に電話をかけようとしていますがself、これは. UIViewController で呼び出す必要があります。おそらく、あなたの状況ではviewControllerです。UIResponderAppDelegate

編集:これは呼び出す行です。呼び出した後は [self.window makeKeyAndVisible]; otherwise self.window.rootViewControllernilになります。

[self.window.rootViewController presentViewController:infoView animated:YES completion:nil];
于 2012-11-23T15:56:43.207 に答える