objective-c prepareForSegue在vc中看不到变量

时间:2016-12-29 22:23:02

标签: objective-c

此代码无法从ClubImageViewController访问变量:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];

    if ([[segue identifier] isEqualToString:@"mySegue"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        ClubImageViewController *vc = (ClubImageViewController * )navigationController.topViewController;
        vc. //here can't see the var from ClubImageViewController
    }

}

ClubImageViewController.m:

#import "ClubImageViewController.h"
#import "KASlideShow.h"

@interface ClubImageViewController () <KASlideShowDataSource,KASlideShowDelegate>
@property (strong, nonatomic) IBOutlet KASlideShow *slideShow;
@property NSArray* imageArray;


@end

我错过了什么?我应该改变故事板中的某些内容吗?

2 个答案:

答案 0 :(得分:1)

基于猜测ClubImageViewController是常规视图控制器,并且OP代码是在目标是导航控制器的复制粘贴中拾取的,一些更简单的代码将起作用...

if ([[segue identifier] isEqualToString:@"mySegue"]) {
    ClubImageViewController *vc = (ClubImageViewController *)segue.destinationViewController;
    // here, all will be fine with the variable vc
}

如果我错了,ClubImageViewController确实是UINavigationController,那么......

if ([[segue identifier] isEqualToString:@"mySegue"]) {
    UINavigationController *navVC = (UINavigationController *)segue.destinationViewController;
    NSArray *viewControllers = navVC.viewControllers;
    ClubImageViewController *vc = (ClubImageViewController *)viewControllers[0];
    // here, all will be fine with the variable vc
}

答案 1 :(得分:0)

//使用字符串“mySegue”

从StoryBoard为你的segue分配一个标识符
//And change fetch your ViewController object by getting the root view controller. I mean look at the last line inside your if condition

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSIndexPath *path = [self.tableView indexPathForSelectedRow];

if ([[segue identifier] isEqualToString:@"mySegue"]) {
    UINavigationController *navigationController = segue.destinationViewController;
    ClubImageViewController *vc = (ClubImageViewController * )[navigationController.viewControllers objectAtIndex:0];
    vc. //here can't see the var from ClubImageViewController
}

上一行

ClubImageViewController *vc = (ClubImageViewController * )navigationController.topViewController;

新行

ClubImageViewController *vc = (ClubImageViewController * )[navigationController.viewControllers objectAtIndex:0];