从不同视图访问的iphone全局变量

时间:2010-05-10 00:11:55

标签: iphone variables global

好吧,最后我想要一个程序,用户可以输入简单的数据,如姓名,出生日期,地址等,然后让这些信息保持多个视图。我让用户输入他们的信息作为UITextFields,但他们是用于输入数据的多个视图。有没有一种方法,当用户在UITextField中输入数据 - 然后移动到另一个视图 - 然后返回到原始视图 - 数据仍将在该UITextField中?我想因为有占位符,当调用viewController时必须有一个命令来显示该字段中的先前写入的文本。

另外,对于我的生活,我无法弄清楚如何将这些变量保持全局。我已经阅读了多个领域,我应该在AppDelegate中将它们定义为一个简单的:

NSString *userName;
NSString *userDOB;

但是如何在不同视图中将UITextFields中的字符串分配给这些变量,然后在用户返回到最初输入它们的位置时将它们重新分配给UITextFields?

(如果我没有连贯地解释这一点,我道歉 - 我有点新手)

CNC中 我已经按照下面的链接,但仍然无法弄清楚这一点。我尝试使用:

NSString *name = [[NSUserDefaults standardUserDefaults]objectForKey:@"name"];

[[NSUserDefaults standardUserDefaults] setObject:@“Horace”forKey:@“name”];

但我不能在正确的地方使用它们。我在哪里使用这个命令?如果我让用户在“ViewController1”中输入变量 - 我应该将这些命令放在“ViewController1.m”文件中的某个位置吗?对于我的生活,我无法弄清楚这一点。

3 个答案:

答案 0 :(得分:3)

App Delegate或NSUserDefaults是全局值的好选项,具体取决于您对它们的处理方式,并经常跳转它们。您可以重载此方法以获得所需内容:

- (无效)viewDidAppear:(BOOL)动画

例如:

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    MyProjectAppDelegate* appDelegate = (MyProjectAppDelegate*)[[UIApplication sharedApplication] delegate];
    userNameTextField.text = appDelegate.userName;
    userDOBTextField.text = appDelegate.userDOB;
}

出现此视图时,它将从App Delegate加载值。

第二个选项是保持对视图控制器的引用,可能再次在App Delegate中。然后,只要您想在视图之间移动,只需根据需要添加和删除视图。不要每次都分配/初始化它,只有第一个。

答案 1 :(得分:0)

认为你有两个问题:

  1. 如何在视图中保留数据,以便当我返回时,它仍然存在?
  2. 如何存储数据以便我的所有观看内容都可以共享?
  3. 第一个我认为我可以轻松回答。如果每个视图有一个控制器,这是推荐的做法。那么通常你会在该视图上拥有属性,你可以通过IBOutlet链接UITextFields。在手动执行此操作或从内存中擦除视图之前,不会清除该数据。因此,您不必担心锣到另一个视图并回来。您的数据将被保留。

    第二个问题更难,因为有很多方法。我自己在这个问题上没有多少经验,但是我看到的是替代方案:

    • 您可以在谈论时使用全局变量。
    • 如果数据足够复杂,您也可以使用Core Data。
    • 您可以创建应用程序委托的属性。 UIApplication上有一个静态方法,您可以从任何地方调用以获取对委托的引用。

答案 2 :(得分:0)

您可以参考之前的question[NSUserDefaults standardUserDefaults]是一种选择。