在按钮触发的方法中,我调用此代码:
//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-uiview控制器之一,而SecondViewController是另一个tab-uiviewcontroller。
为什么没有设置sVC.userLocation
?
答案 0 :(得分:1)
这一行:
if([anyVC.class isKindOfClass:[SecondViewController class]])
应该是:
if([anyVC isKindOfClass:[SecondViewController class]])
因为您想知道 anyVC
(不是anyVC.class
)是否属于SecondViewController
类型。
anyVC.class
(或[anyVC class]
)返回的值将为Class
类型,且永远不会为SecondViewController
类型(因此if
条件始终返回{{ 1}})。
由于永远不会满足NO
条件,if
永远不会被设置,可能会停留self.sVC
,这意味着nil
调用什么也不做,等等。
此外,您可能希望将与setUserLocation
相关的所有语句放在self.sVC
块中,否则即使if
条件setUserLocation
和NSLog
也会执行失败:
if
答案 1 :(得分:0)
您可能需要考虑的其他事项:
在sVc中将alloc / init设置为userLocation变量,例如-init
或-viewDidLoad
?
您在sVc课程中有@property (nonatomic, strong) CLLocation *userLocation
吗?