gpt4 book ai didi

ios - 为什么未设置 viewcontroller 属性?

转载 作者:行者123 更新时间:2023-11-29 13:20:22 25 4
gpt4 key购买 nike

在一个由按钮触发的方法中,我调用这段代码:

//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-uiviewcontroller 中,而 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 block 中,否则 setUserLocationNSLog 即使 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 %@", ...
}
}

关于ios - 为什么未设置 viewcontroller 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14504656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com