2010-11-24 46 views
3

我用NSUserDefaults來存儲一個值。我在NSUserDefaults中存儲了一些整數值,如下所示在第一個視圖中。如何使用NSUserDefaults從一個視圖讀取值到另一個視圖?

我在接口文件中聲明如下..

NSUserDefaults *prefs; 
    @property(nonatomic,retain) IBOutlet NSUserDefaults *prefs; 

然後我在類文件中使用如下如下

@synthesize passwordfield,prefs; 

passwordfield是的UITextField

NSInteger myInteger = [passwordfield.text integerValue]; 
[prefs setInteger:myInteger forKey:@"integerKey"]; 
[prefs synchronize]; 
NSInteger myInt = [prefs integerForKey:@"integerKey"]; 
NSLog(@"My integer Value: %d",myInt); 

然後我使用導航控制器移動到下一個視圖。

但我無法從第一個視圖讀取NSUserDefaults的值。

我在第二個視圖中使用瞭如下代碼。

PasswordCheckViewController *nextController = [[PasswordCheckViewController alloc] initWithNibName:@"PasswordCheckViewController" bundle:nil]; 
NSLog(@"Pass in Next: %d",[nextController.prefs integerForKey:@"integerKey"]); 

但是輸出如下。

Pass in Next: 0 

我怎樣才能從第一個視圖中使用第二NSUserDefaults的以價值?

+0

如何爲「首選項」設置在哪裏是否宣佈?你爲什麼說`nextController.prefs`而不是`prefs`?如果prefs是PasswordCheckViewController的一個屬性,它是如何初始化的? – Anna 2010-11-24 16:10:34

回答

4

你在做什麼是錯的,NSUserDefaultsIBOutlets,一個IBOutlet是用來指一個InterfaceBuilder中控制。

NSUserDefault通常用於存儲一些首選項值。
通常,通過調用standardUserDefaults類方法來獲取NSUserDefaults對象,可以使用NSUserDefaults類。此方法返回一個全局的NSUserDefaults對象,其中已經初始化了一個搜索列表。使用objectForKey:setObject:forKey:方法來獲取和設置默認值。需要注意的是默認的值只能是屬性列表對象:NSDataNSStringNSNumberNSDateNSArray,或者NSDictionary
在你的情況要創建哪些是不需要的IBOutlet。不要這樣

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSInteger myInteger = [passwordfield.text integerValue]; 
    [prefs setObject:myInteger forKey:@"integerKey"]; 
    NSInteger myInt = [prefs objectForKey:@"integerKey"]; 

這會給你同步NSUserDefaults,這樣你不需要存儲任何的伊娃。
您可以從任何類訪問對象的價值的應用程式內

1

您正在混合視圖和視圖控制器。因此,您可以從導航控制器獲取所需的視圖控制器,並在視圖未卸載的情況下從其獲取所需的視圖。 例如,如果自己是第二視圖控制器,你想從第一個視圖控制器讀取:

MyFirstViewController *vc = (MyFirstViewController*)[self.navigationController.viewControllers objectAtIndex: indexOfFirst]; 
// ... now copy your prefs from first to second 
self.prefs = vc.prefs; 
0

使用此代碼的功能,其中u需要使用NSUserDefaults來獲取值:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSInteger myInt = [prefs integerForKey:@"a"]; 
相關問題