2010-11-24 6 views
3

NSUserDefaultsを使用して値を格納しました。最初のビューで次のようにNSUserDefaultsに整数値を格納します。あるビューから別のビューにNSUserDefaultsを使って値を読み取る方法は?

次のように私はここ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); 

の名前です

@synthesize passwordfield,prefs; 

を次のように

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

は、その後、私はクラスファイルで使用される..インターフェイスファイルで宣言されましたナビゲーションコントローラを使用して次のビューに移動します。

しかし、最初のビューからNSUserDefaultsの値を読み取ることができません。

2番目のビューでは次のようなコードを使用しました。

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

ただし、次のように出力されます。

Pass in Next: 0 

NSUserDefaultsを使用して最初のビューから2番目のビューに値を取得するにはどうすればよいですか?

+0

それは宣言されていますか? 'prefs'の代わりに' nextController.prefs'と言うのはなぜですか? prefsがPasswordCheckViewControllerのプロパティである場合、どのように初期化されますか? – Anna

+0

こんにちはaBitObvious、私は今私の質問を編集..私を助けてください.. NSUserDefaultsを使用して、あるビューから別のビューに値を取得する方法。 – Velmurugan

+0

なぜprefsはIBOutletですか?どこにでもプロパティを宣言するのではなく、単に '[NSUserDefaults standardUserDefaults]'を使うことができます。 – Anna

答えて

4

IBOutletがInterfaceBuilderコントロールを参照するために使用され、NSUserDefaultsIBOutletsていない、間違っています。

NSUserDefaultは、通常、いくつかの設定値を格納するために使用されます。
通常、standardUserDefaultsクラスメソッドを呼び出してNSUserDefaultsオブジェクトを取得して、NSUserDefaultsクラスを使用します。このメソッドは、すでに初期化された検索リストを持つグローバルNSUserDefaultsオブジェクトを返します。デフォルト値を取得および設定するには、objectForKey:およびsetObject:forKey:メソッドを使用します。デフォルトの値は唯一のプロパティリストオブジェクトでき​​ることに注意してください:NSDataNSStringNSNumberNSDateNSArray、またはNSDictionary
あなたのケースでは、あなたが必要とされていないIBOutletを作成しています。あなたはIVARとして何かを格納する必要がいけないように、これはあなたに同期NSUserDefaultsを与えるこの

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

好きです。
あなたはuがNSUserDefaultsを使用して値を取得する必要がある機能で、このコードを使用してアプリ内の任意のクラスから

1

ビューコントローラとビューコントローラが混在しています。したがって、ビューがアンロードされなかった場合は、ナビゲーションコントローラから目的のビューコントローラを取得し、そこから目的のビューを取得することができます。例えば 自己2番目のビューコントローラであり、あなたが最初のビューコントローラから読み込みたい場合:何をやっている

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

のオブジェクトの値にアクセスすることができます。

「環境設定」を設定し、どのように
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
NSInteger myInt = [prefs integerForKey:@"a"]; 
関連する問題