如何将NSMutableArray传递给另一个视图

时间:2015-09-02 12:01:21

标签: ios objective-c swrevealviewcontroller

以下代码片段是prepareForSegue方法的一部分。我希望将self.mutaArr(MutableArray)传递给SecViewController(这是UIViewController)。

由于以下行,因此没有通过:

[navController setViewControllers:@[dvc] animated: NO ];

如果我通过s,我最终会收到黑屏。因此,我该如何对此进行排序?

请注意,我也在使用SWRevealViewController

if ([segue isKindOfClass:[SWRevealViewControllerSegue class]]) {

    SWRevealViewControllerSegue *swSegue = (SWRevealViewControllerSegue*) segue;    
    swSegue.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) {

    if ([[segue identifier] isEqualToString:@"gosegue"]) {

        UINavigationController* navController = (UINavigationController*)self.revealViewController.frontViewController;
        SecViewController *s = [[SecViewController alloc] init];
        s.myMutableArr= self.mutaArr;
        [navController setViewControllers:@[dvc] animated: NO ];
        [self.revealViewController setFrontViewPosition: FrontViewPositionLeft animated: YES];
....

3 个答案:

答案 0 :(得分:0)

我没有看到变量s的任何角色,除了设置一个可变数组,你有没有把这个控制器推到任何地方?也许:

SecViewController *s = [[SecViewController alloc] init];
s.myMutableArr= self.mutaArr;

navController setViewControllers:@[s] animated: NO ];  // Notice `s` replaced `dvc`

恕我直言,最好将值从一个控制器/视图传递到其他控制器/视图是使用会话(即Singleton类)。在swSegue.performBlock块内的会话中设置值,并在viewDidLoad的{​​{1}}中获取值。

修改

查看this tutorial单例实现。在第二个示例中,SecViewController可以是someProperty

为了获得黑屏,我只是注意到你没有反映your arraynavController

也许使用这个:

self.revealViewController

- (void)pushFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated; 上推送navController可能会解决黑屏问题。

修改

试试这样:

self.revealViewController

答案 1 :(得分:0)

我从您提供的代码中看到了一些问题:

  1. 您必须在segue的目标视图控制器中定义一个属性,该属性可以保存您的阵列并将其设置在源视图控制器的prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法中。这可确保您在转换之前设置数据结构(即阵列) 。您可以通过

    检索segue的目标视图控制器
    UIViewController *viewController = [segue destinationViewController];
    SecViewController *destination = (SecViewController *)viewController;
    destination.arrayHoldingProperty = self.myArray;
    

    此处假设您已在arrayHoldingProperty课程中定义了SecViewController

  2. 完成第一步后,您可以使用performSegueWithIdentifier:@"whatever" sender:nil方法从任何地方执行segue。

答案 2 :(得分:0)

您正在制作另一个SecViewController类的实例

 class Demo 
    {
         // --------------
         //---------------
    };

不要使用它而不是使用它:

  SecViewController *s = [[SecViewController alloc] init];