1

在由按钮触发的方法中,我调用此代码:

//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没有被设置?

4

2 回答 2

1

这一行:

if([anyVC.class isKindOfClass:[SecondViewController class]])

应该是:

if([anyVC isKindOfClass:[SecondViewController class]])

因为你想知道anyVC(not anyVC.class) 是否属于 type SecondViewController


anyVC.class(or ) 返回的值[anyVC class]将是类型Class并且永远不会是类型SecondViewController(因此if条件总是返回NO)。

由于if条件永远不会满足,self.sVC永远不会被设置并且可能保持不变,nil这意味着setUserLocation调用什么都不做,等等。


此外,您可能希望将所有与块相关的语句self.sVC放在if块内,否则即使条件失败setUserLocation,也会执行 get :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 %@", ...
    }
}
于 2013-01-25T04:09:04.583 回答
0

您可能需要考虑的其他事项:

  • 在 sVc 中有你的 alloc/init 你的 userLocation 变量,例如 in-init-viewDidLoad

  • 你有@property (nonatomic, strong) CLLocation *userLocationsVc 课程吗?

于 2013-01-24T16:00:47.867 回答