0

私はiOS開発者であり、OSXアプリケーションを開発する予定です。しかし、それらは互いに非常に異なっています。

アプリケーションの起動時にスプラッシュ画面を追加したい。

- (void) applicationDidFinishLaunching:(NSNotification *)aNotification {

 // Hide main window
 [self.window orderOut:nil];

 SplashWindowController *splashWindowController = [[SplashWindowController alloc] initWithWindowNibName:@"SplashWindowController"];

 [NSApp runModalForWindow:splashWindowController.window];
 [splashWindowController release];

 // Show main window
 ...

そしてここに「SplashWindowController.m」があります

- (void)windowDidLoad {
  [super windowDidLoad];

  [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideSplash) userInfo:nil repeats:NO];
}

- (void)hideSplash {
  [NSApp endSheet:self.window];
  [self.window orderOut:nil];
}

表示されたスプラッシュを確認できますが、hideSplash関数が呼び出されることはありません。どういう理由ですか?

4

1 に答える 1

3

エラーが発生しないのではないかと思いますが、この行にはタイプミスがあります。

[NSTimer scheduledTimerWithTimeInterval:2.0 target self selector:@selector(hideSplash) userInfo:nil repeats:NO];

そのはず

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideSplash) userInfo:nil repeats:NO];

一方、これを試すことができます:

NSTimer *theTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideSplash) userInfo:nil repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:theTimer forMode:NSRunLoopCommonModes];

[NSTimer…]がすぐに破棄されるかどうかはわかりません…インスタンスに割り当てるのは問題ないはずです。また、実行ループが中断されるため、メインの実行ループにタイマーを追加してみてください。

于 2012-10-14T09:51:33.963 に答える