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されますが、常に null になる は記録されません。

このメソッドは、uitabbarcontroller の tab-uiviewcontrollers の 1 つにありますが、SecondViewController は他の tab-uiviewcontroller です。

なぜsVC.userLocation設定されていないのですか?

4

2 に答える 2

1

この行:

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

おそらく次のようになります。

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

anyVC(not anyVC.class) のタイプがかどうかを知りたいからですSecondViewController


anyVC.class(or [anyVC class]) によって返される値は型になり、型ClassになることはありませんSecondViewController(したがって、if条件は常に を返しますNO)。

if条件が満たされることは決してないため、self.sVC設定されることはなく、おそらく呼び出しが何もしないことnilを意味するままになります。setUserLocation


また、関連するすべてのステートメントをブロックself.sVC内に配置することをお勧めします。それ以外の場合は、条件が失敗した場合でも実行されます。ifsetUserLocationNSLogif

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

あなたが考慮に入れる必要があるかもしれない他の事柄:

  • -initinや-viewDidLoad?などのsVcのuserLocation変数をalloc/initにします。

  • @property (nonatomic, strong) CLLocation *userLocationsVcクラスにありますか?

于 2013-01-24T16:00:47.867 に答える