0

ここで同様の質問に対する以前の回答のいくつかを見てきましたが、まだ理解できません。

これがコードです(ShareKitから)

if (isDismissingView)
  return;

NSLog(@"presentingViewController: %@", [self.currentView presentedViewController]);

if (self.currentView != nil)
{
  // Dismiss the modal view
  if ([self.currentView parentViewController] != nil)
  {
    self.isDismissingView = YES;
    [[self.currentView parentViewController] dismissModalViewControllerAnimated:animated];
  }
  // for iOS5
  else if ([self.currentView respondsToSelector:@selector(presentingViewController)] && [self.currentView presentingViewController]) {     
    //****** it executes this block ******
    self.isDismissingView = YES;            
    [[self.currentView presentingViewController] dismissViewControllerAnimated:animated completion:^{  ...  }
  }
  else
    self.currentView = nil;
}

NSLog では、結果は です(null)。これは明らかに nil と同じではありません。これは、nil でないかどうかをテストするブロックが

else if ([self.currentView respondsToSelector:@selector(presentingViewController)] && [self.currentView presentingViewController])

実行されます。

そこで、質問が 3 つあります。とは(null)? オブジェクトまたはポインターはどのようになり(null)ますか? この状態をテストする正しい方法は何ですか?

4

3 に答える 3

4

NSLog()は、オブジェクト形式%@にnil値を指定すると、「(null)」を出力します。これは、の出力を見て確認できます。

NSLog(@"%@", nil);

したがって、[self.currentViewpresentedViewController]は確かにnilです。else ifテストは、現在* ing * ViewControllerであり、現在* ed *ViewControllerではありません。

于 2012-05-25T04:26:17.737 に答える
2

nilはオブジェクト用と非オブジェクト用ですが、nilを意味する場合でも、オブジェクトの説明としてnullnullを出力すると思います。NSLogブレークポイントを設定して、コードのこの時点でデバッガーが何を言っているかを確認しようとしましたか?

于 2012-05-25T04:22:18.350 に答える
2

あなたはログに記録していますpresentedViewControllerが、テストしていますpresentingViewController

于 2012-05-25T04:24:25.470 に答える