【问题标题】:How to get the nsuserdefault value in other viewcontrollers如何在其他视图控制器中获取 nsuserdefault 值
【发布时间】:2011-04-22 05:12:04
【问题描述】:

我有两个视图控制器。在我的第一个视图控制器中:

{           
    NSString *string=textField.text;  
    NSUserDefaults *data = [NSUserDefaults standardUserDefaults];  

    [data setObject:string forKey:@"strings"];
    [data synchronize];
}   

如何在我的其他视图控制器中获取字符串值?

【问题讨论】:

    标签: ios objective-c cocoa-touch uiviewcontroller


    【解决方案1】:

    在这里,您可以在应用程序中使用它来存储 NSUserDefaults 的值。

    // --- Saving
    
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    // saving an NSString
    [prefs setObject:@"TextToSave" forKey:@"keyToLookupString"];  
    // saving an NSInteger
    [prefs setInteger:42 forKey:@"integerKey"];
    // saving a Double
    [prefs setDouble:3.1415 forKey:@"doubleKey"];
    // saving a Float
    [prefs setFloat:1.2345678 forKey:@"floatKey"];
    // This is suggested to synch prefs, but is not needed (I didn't put it in my tut)
    [prefs synchronize];
    

    在这里,您可以在应用程序中使用它来获取 NSUserDefaults 的值。

    // --- Retrieving
    
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    // getting an NSString
    NSString *myString = [prefs stringForKey:@"keyToLookupString"];
    // getting an NSInteger
    NSInteger myInt = [prefs integerForKey:@"integerKey"];
    // getting an Float
    float myFloat = [prefs floatForKey:@"floatKey"];
    

    【讨论】:

      【解决方案2】:

      您可以使用在一个类中编写的相同代码在应用程序的任何控制器(应用程序的任何类)中访问NSUserDefaults

      获取字符串值使用下面的代码

      NSUserDefaults *data = [NSUserDefaults standardUserDefaults];  
      NSString *myString = [data objectForKey:@"strings"];
      

      【讨论】:

        【解决方案3】:
        NSUserDefaults * defaults =  [NSUserDefaults standardUserDefaults]; 
        NSString *myString = [defaults stringForKey:@"strings"];
        

        这是检索数据的方法。请注意NSUserDefault 不用于在两个控制器之间传递数据。有更好的方法。

        编辑:在看到 Shaan Singh 的评论后

        要传递数据 2 个视图控制器,您可以在第二个视图控制器中声明一个属性并从当前视图控制器访问它。

        已经精彩回答here

        【讨论】:

        • 我同意基尔的观点。在控制器之间传递数据还有哪些好方法?
        【解决方案4】:

        在另一个 ViewController 中,

        NSUserDefaults *data = [NSUserDefaults standardUserDefaults];  
        NSString *string = [data objectForKey:@"strings"];
        

        这将起作用,因为NSUserDefaults 是一个全局键值存储,将跨类和应用程序持续存在。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-02
          • 2013-01-12
          • 1970-01-01
          • 2016-03-31
          相关资源
          最近更新 更多