我在这里看到了一些类似问题的先前答案,但我仍然不明白。
这是代码(来自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)
?测试这种情况的正确方法是什么?
答案 0 :(得分:4)
NSLog()在为对象格式%@指定nil值时打印“(null)”。您可以通过查看
的输出来验证这一点NSLog(@"%@", nil);
所以[self.currentView presentsViewController]确实是零。 else if if test at present * ing * ViewController,not present * ed * ViewController。
答案 1 :(得分:2)
nil
用于对象,null
用于非对象,但我认为NSLog
打印null作为对象的描述,即使它意味着为零。您是否尝试设置断点并检查调试器在此代码处所说的内容?
答案 2 :(得分:2)
您正在记录presentedViewController
,但正在测试presentingViewController
。