在按钮触发的方法中,我将此代码称为:
//Get the sVC in order to se its property userLocation
UITabBarController *myTBC = (UITabBarController*)self.parentViewController;
for(UIViewController *anyVC in myTBC.viewControllers) {
if([anyVC.class isKindOfClass:[SecondViewController class]])
self.sVC = (SecondViewController *)anyVC;
[self.sVC setUserLocation:self.userLocation];
NSLog(@"userLocation ISSET to %@ from %@", self.userLocation, sVC.userLocation);
}
控制台日志始终记录正确的
self.userLocation
值,但不记录sVC.userLocation
,该值始终为空。此方法位于uitabbarcontroller的一个tab-uiviewcontrollers中,而SecondViewController是另一个tab-uiviewcontroller。
为什么不设置
sVC.userLocation
? 最佳答案
这行:
if([anyVC.class isKindOfClass:[SecondViewController class]])
应该可能是:
if([anyVC isKindOfClass:[SecondViewController class]])
因为您想知道
anyVC
(不是anyVC.class
)的类型是SecondViewController
。anyVC.class
(或[anyVC class]
)返回的值将是 Class
类型,并且永远不会是SecondViewController
类型(因此if
条件始终返回NO
)。由于
if
条件从未得到满足,因此self.sVC
永远不会设置,并且可能会停留在nil
中,这意味着setUserLocation
调用不执行任何操作,依此类推。另外,您可能希望将所有与
self.sVC
相关的语句放入if
块中,否则即使setUserLocation
条件失败,也会执行NSLog
和if
:for (UIViewController *anyVC in myTBC.viewControllers)
{
if ([anyVC isKindOfClass:[SecondViewController class]])
{
self.sVC = (SecondViewController *)anyVC;
[self.sVC setUserLocation:self.userLocation];
NSLog(@"userLocation ISSET to %@ from %@", ...
}
}