Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将NSMutableArray传递给另一个视图_Ios_Objective C_Swrevealviewcontroller - Fatal编程技术网

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

Ios 如何将NSMutableArray传递给另一个视图,ios,objective-c,swrevealviewcontroller,Ios,Objective C,Swrevealviewcontroller,下面的代码片段是prepareForSegue方法的一部分。在这种情况下,我想将self.mutaArr(MutableArray)传递给SecViewController(这是一个UIViewController) 由于以下行,无法通过此操作: [navController设置视图控制器:@[dvc]动画:否] 如果我通过了s我最终会得到一个黑屏。因此,如何对其进行排序 请注意,我也在使用SWRevealViewController if ([segue isKindOfClass:[SWRe

下面的代码片段是
prepareForSegue
方法的一部分。在这种情况下,我想将
self.mutaArr
(MutableArray)传递给
SecViewController
(这是一个
UIViewController

由于以下行,无法通过此操作:

[navController设置视图控制器:@[dvc]动画:否]

如果我通过了
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];
....

除了设置可变数组外,我没有看到变量
s
的任何角色,您是否已将此控制器推到任何位置?也许:

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

navController setViewControllers:@[s] animated: NO ];  // Notice `s` replaced `dvc`
在IMHO中,将值从一个控制器/视图传递到另一个控制器/视图的最佳方法是使用会话(即Singleton类)。在
swSegue.performBlock
块内的会话中设置值,并在
SecViewController
viewdiload
中获取值

编辑

请查看有关单例实现的详细信息。在第二个示例中,
someProperty
可以是
数组

对于黑屏,我注意到您没有将
navController
反映到
self.revealViewController

也许用这个:

- (void)pushFrontViewController:(UIViewController *)frontViewController animated:(BOOL)animated; 
按下
self上的
navController
。revealViewController
可能会修复黑屏问题

编辑:

试着这样做:

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

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

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

  • 您必须在segue的目标视图控制器中定义一个可以容纳数组的属性,并在源视图控制器的
    prepareforsgue:(UIStoryboardSegue*)segue sender:(id)sender
    方法中进行设置。这确保您在转换之前设置数据结构(即数组)。您可以通过执行以下操作来检索segue的目标视图控制器

    UIViewController *viewController = [segue destinationViewController];
    SecViewController *destination = (SecViewController *)viewController;
    destination.arrayHoldingProperty = self.myArray;
    
    这里假设您已经在
    SecViewController
    类中定义了
    arrayHoldingProperty

  • 完成第一步后,您可以使用
    performsguewithidentifier:@“which”sender:nil
    方法从任何地方执行segue


  • 您正在创建SecViewController类的另一个实例

      SecViewController *s = [[SecViewController alloc] init];
    
    不要使用此选项,而要使用此选项:

     SecViewController *s = (SecViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"SecViewController"];
     s.myMutableArr= self.mutaArr;
    

    在这个过程中,什么是svc?当您切换到查看
    dvc
    时,
    s
    应该是什么?为什么您首先在
    prepareForSegue
    中使用
    setViewControllers
    ?另外,您从不使用
    s
    变量,因此,
    self.mutaArr
    没有在任何地方传递也就不足为奇了。有一点,如果确实要将其放在单例中,当然只需将其放在AppDelegate中即可。只要在AppDelegate.h中添加一个属性就可以了。当我设置
    @['s']
    时,我会看到一个空白屏幕。你能给我看一个关于如何设置单例类的详细例子吗?你能给我看一下如何通过它吗。我有点困惑。我得到了这个错误,
    SWRevealViewController'的@interface声明选择器“pushFrontViewController:animated:”
    是否使用此控件:请参见
    基本API描述部分中的此函数列表。您可能需要更新此API吗?