Ios 使用popover在prepareForSegue中设置属性

Ios 使用popover在prepareForSegue中设置属性,ios,objective-c,Ios,Objective C,我有一个ViewController,上面有两个在Interface Builder中创建的按钮。第一个按钮将显示一个在IB中链接的popover,它链接到一个UINavigationController,下面有一个TableView,其类为PopupViewController 第二个按钮,我为goToCategory设置了一个操作设置,单击该按钮时,我想在PopupViewController ViewController.m //go to category -(IBAction)goTo

我有一个ViewController,上面有两个在Interface Builder中创建的按钮。第一个按钮将显示一个在IB中链接的popover,它链接到一个UINavigationController,下面有一个TableView,其类为
PopupViewController

第二个按钮,我为
goToCategory
设置了一个操作设置,单击该按钮时,我想在
PopupViewController

ViewController.m
//go to category
-(IBAction)goToCategory:(id)sender{
    NSLog(@"GO TO CAT");
    //PopupViewController *popupVC = [self.storyboard instantiateViewControllerWithIdentifier:@"popoverVC"];
    //popupVC.currentLevel = 1;
    [self performSegueWithIdentifier:@"popoverSegue" sender:self];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSLog(@"seg1");
    if ([[segue identifier] isEqualToString:@"popoverSegue"]){
        //PopupViewController *popupVC = (PopupViewController *)[[segue destinationViewController] visibleViewController];
        //PopupViewController *popupVC = [segue destinationViewController];
        PopupViewController *popupVC=[[[segue destinationViewController]viewControllers]objectAtIndex:0];
        popupVC.test = @"just a test";
        NSLog(@"seg2");
    }
}

PopupViewController.h
@property (nonatomic, strong) NSString *test;

PopupViewController.m
@synthesize test;
-(void)viewDidLoad{
    NSLog(@"test: %@", test); //returns test: (null)
}
我在这方面找到了很多答案,因此在我的PrepareForegue中有一些被注释掉的行。但是这些都没有设置
test
的值<代码>PopupViewController*popupVC=[segue destinationViewController]抛出一个错误,因为它引用了UINavigationController,所以我不能按原样使用它,尽管在我看到的许多答案中,这似乎是实现它的方法。但不管我用哪种方式做,输出总是空的

更新:

PopupViewController*popupVC=(PopupViewController*)[[segue destinationViewController]visibleViewController]
PopupViewController*popupVC=[[[segue destinationViewController]ViewController]对象索引:0]prepareforsgue
中的code>都在6.1模拟器上工作。我的iPad的iOS版本是5.1.1,但它没有使用。对于iOS 5,我需要做些不同的事情吗?

试试这个

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"seg1");
    if ([[segue identifier] isEqualToString:@"popoverSegue"])
    {
        UINavigationController *navController = (UINavigationController*)[segue destinationViewController];
        PopupViewController *popupVC = [navController topViewController];
        popupVC.test = @"just a test";
        NSLog(@"seg2");
    }
}

我确实尝试过按照您刚才的方式编写它,但正如我所提到的,它抛出了一个错误,即
[UINavigationController setTest:]:无法识别的选择器发送到实例
,因为目标视图控制器是一个UINavigationController,而不是PopupViewcontroller刚刚尝试了新更新的代码,但仍然没有成功:(已尝试将行更改为
PopupViewController*popupVC=(PopupViewController*)[navController-topViewController]
以及xcode给了我一个警告,“初始化PopupViewController的指针类型不兼容,表达式类型为UIViewController”\uu\strong“您有两个导航控制器吗?PopupViewController是否设置为导航控制器的根viewcontroller?对于popover,我有一个导航控制器,是的PopupVC是set作为导航控制器的根视图控制器。有趣的是,当我正要更新我的答案时,
PopupViewController*popupVC=(PopupViewController*)[[segue destinationViewController]visibleViewController];
PopupViewController*popupVC=[[segue destinationViewController]ViewController]objectAtIndex:0]
从我最初的问题来看,两者似乎都在6.1模拟器上工作。我的iPad的iOS是5.1.1,但它没有工作。iOS 5有什么不同的地方需要我做吗?嗯,如果你想访问你的Popover,这应该可以:[(UIStoryboardPopoverSegue*)segue popoverController]