在按钮触发的方法中,我将此代码称为:

//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条件失败,也会执行NSLogif:
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 %@", ...
    }
}

10-08 05:35