【问题标题】:Passing data from popped view controller从弹出的视图控制器传递数据
【发布时间】:2011-07-27 19:28:05
【问题描述】:

我有两个视图控制器。我是第一个,当我按下按钮时,第二个视图控制器被推到导航控制器的堆栈上。在这里,在第二个视图控制器中,我有一个表格视图,当我点击某些行时,它们被选中(如复选框),并且与该行相关的一些数据被添加到数组中。现在,当我完成选择后,我想回到第一个视图控制器并使用该数组。怎么做?现在我的应用程序是这样工作的:我有一个委托协议,然后是我拥有属性数组的对象,我可以从整个应用程序访问该对象及其数组......但我真的不喜欢那样。这是正确/最好/最简单的方法吗?

【问题讨论】:

    标签: ios objective-c uinavigationcontroller


    【解决方案1】:

    我有一个委托协议,然后是我拥有属性数组的对象,我可以从整个应用程序访问该对象及其数组……但我真的不喜欢那样。这是正确/最好/最简单的方法吗?

    委托是在这里使用的正确模式,但是您所描述的与其说是委托,不如说是使用全局变量。也许您将全局变量存储在您的 App Delegate 中——如果可以的话,通常是可以避免的。

    下面是代码的大致轮廓:

    SecondViewController.h:

    @protocol SecondViewControllerDelegate;
    
    @interface SecondViewController;
    
    SecondViewController : UIViewController
    {
        id<SecondViewControllerDelegate> delegate;
    
        NSArray* someArray;
    }
    
    @property (nonatomic, assign) id<SecondViewControllerDelegate> delegate;
    @property (nonatomic, retain) NSArray* someArray;
    
    @end
    
    @protocol SecondViewControllerDelegate
    - (void)secondViewControllerDidFinish:(SecondViewController*)secondViewController;
    @end
    

    SecondViewController.m:

    @implementation SecondViewController
    
    @synthesize delegate;
    @synthesize someArray;
    
    - (void)dealloc
    {
        [someArray release];
        [super dealloc];
    }
    
    - (void)someMethodCalledWhenUserIsDone
    {
        [delegate secondViewControllerDidFinish:self];
    }
    

    FirstViewController.h:

    #import SecondViewController
    
    @interface FirstViewController : UIViewController <SecondViewControllerDelegate>
    {
        ...
    }
    
    @end
    

    FirstViewController.m:

    @implementation FirstViewController
    
    - (void)secondViewControllerDidFinish:(SecondViewController*)secondViewController
    {
        NSArray* someArray = secondViewController.someArray
        // Do something with the array
    }
    
    @end
    

    【讨论】:

    • 谢谢...但可能我做错了什么,因为它不起作用:(
    • 我必须设置 secondViewController.delegate = self;在我推它之前......现在它可以工作了:) 再次感谢
    【解决方案2】:

    你需要reference你的secondViewController,并为它创建一个对象。

    secondViewController *object2 = [[SecondViewController alloc] init];
    

    object2.thatArray 将包含数组的内容。当您离开该视图控制器时,请确保该数组保留其值(或者您可以在您的 AppDelegate 中创建该数组,以便所有视图控制器都可以访问它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 2017-04-22
      • 2015-08-16
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多