在viewcontrollers之间共享数据

时间:2014-04-16 23:43:39

标签: ios storyboard share viewcontroller

我正在为iPad构建一个多视图应用程序。目前,我在ViewControllers上有3 SplitViewController Application。如何将ViewController 1View Controller 2上插入的数据发送到ViewController 3? 这是我的故事板中的图像。

Storyboard

3 个答案:

答案 0 :(得分:2)

考虑你要从ViewController1向ViewController2,ViewController3发送字符串数据。

在ViewController2和ViewController3中创建字符串变量的属性。

@property(nonatomic,strong) NSString *str;

同时推送ViewController2和ViewController3:

  ViewController2 *viewController = [ViewController2 alloc]init];
  viewController2.str = @"Some text";
  [self.navigationController pushViewController:viewController2 animated:YES];

您可以从ViewController2中的ViewController1发送数据。

答案 1 :(得分:1)

您必须保留对数据的引用,并在视图控制器之间传递它,或从某个地方检索它。它可以来自本地数据库,来自单例实例中的内存中对象,也可以是其他任何内容。

也许在您的用例中,触发segue的视图控制器(具有大量按钮的视图控制器)可以保存包含数据的对象,并在即将到来时将其传递给视图控制器1,2和3。出现。

答案 2 :(得分:0)

使用父NSObject创建新类Singleton

@interface Singleton : NSObject

@property (nonatomic, strong) NSString *stringParams1;
@property (nonatomic, strong) NSString *stringParams1;

+ (Singleton *)sharedInstance;

@end

Singleton.m:

@implementation STGameHelper

+ (Singleton *)sharedInstance
{
    static dispatch_once_t once;
    static id sharedInstance;
    dispatch_once(&once, ^{
        sharedInstance = [[self alloc] init];
    });
    return sharedInstance;
}

@end

因此在视图控制器1和2中只需访问此单例:

Singleton *s = [Singleton sharedInstance];

s.stringParams1 = textField1.text;
s.stringParams2 = textField12.text;

在视图控制器3中,您将拥有相同的单例实例。例如在viewDidLoad中访问它:

Singleton *s = [Singleton sharedInstance];

textField1On3rdViewcontroller.text = s.stringParams1;
textField2On3rdViewcontroller.text = s.stringParams2;

在此处阅读有关单身人士的更多信息:link

由于您是初学者,我建议您现在使用单例而不是核心数据,但如果您需要在输入后存储数据,我建议您阅读一些教程如何使用核心数据,因为它是非常强大的东西它会让你的生活更轻松。但是现在,如果你需要在应用程序关闭后存储数据,它就足以拥有单例。