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])

被执行。

所以我有三个问题。是什么(null)?对象或指针如何变成(null)? 测试这种情况的正确方法是什么?

4

3 回答 3

4

当您为对象格式 %@ 赋予 nil 值时,NSLog() 会打印“(null)”。您可以通过查看输出来验证这一点

NSLog(@"%@", nil);

所以 [self.currentViewpresentViewController] 确实是零。else if 测试正在查看 present* ing *ViewController,not present* ed *ViewController。

于 2012-05-25T04:26:17.737 回答
2

nil适用于对象和null非对象,尽管我认为NSLogprint null 作为对象的描述,即使它意味着 nil。您是否尝试过设置断点并检查调试器在此代码点上所说的内容?

于 2012-05-25T04:22:18.350 回答
2

您正在记录presentedViewController但正在测试presentingViewController

于 2012-05-25T04:24:25.470 回答