如何在其他视图控制器中获取 nsuserdefault 值

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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 是一个全局键值存储,将跨类和应用程序持续存在。

【讨论】:

以上是关于如何在其他视图控制器中获取 nsuserdefault 值的主要内容,如果未能解决你的问题,请参考以下文章

如何laravel视图里访问其他控制器的路由

如何快速获取指向视图控制器的全局指针

获取不同视图中存在的选择器视图的选定值并在其他视图中使用字符串

当视图控制器呈现在另一个视图控制器上时如何获取屏幕截图?

将 NSUrl 转换为 PHAsset iOS 8

我们如何在 firstVC 中获取 secondVC json 值而不快速进入 secondVC