2012-02-22 23 views
0

@"hello"をテーブルに置き換えると、セルが空白になります。こんにちはを残すと、「detailsstring」を含めてすべてが機能します。私は、なぜ文字列がtitlestringとまったく同じように設定されているので、それがなぜそれをしているのかわかりません。 、今NSUserDefaultsがテーブルセルに保存されない

- (void)viewDidLoad{   
    titlestring =[[NSUserDefaults standardUserDefaults] objectForKey:@"titletext"]; 
    detailsstring = [[NSUserDefaults standardUserDefaults] objectForKey:@"details"]; 

    tabledata = [[NSArray alloc] initWithObjects:@"hello", nil]; 
    tablesubtitles = [[NSArray alloc] initWithObjects:detailsstring, nil]; 
    [super viewDidLoad]; 
} 

:私は

@synthesize detailsstring; 
@synthesize titlestring; 

を持って、それはすべて私もこれを持っている.Mでの.hで同じ定義されています.mファイル内 : はここのコードですこれらのUserdefaultsを別のコントローラに保存しています。別のビューコントローラーの保存ボタンアクションは次のとおりです。

- (IBAction)saveButton:(id)sender { 
    NSUserDefaults *titletext = [NSUserDefaults standardUserDefaults]; 
    [titletext setObject:titleTextfield.text forKey:@"titletext"]; 

    NSUserDefaults *details = [NSUserDefaults standardUserDefaults]; 
    [details setObject:detailstextfield.text forKey:@"details"]; 

    NSUserDefaults *categoryUser = [NSUserDefaults standardUserDefaults]; 
    [categoryUser setInteger:selectedCategory forKey:@"category"]; 
} 

私は間違っていますか?

+0

あなたはARCを使用していますか? – ThomasW

+0

また、どのようにテーブルサブタイトルを使用していますか?そこに参考になっているものはありますか? – ThomasW

+0

'[super viewDidLoad]'は、 'viewDidLoad'メソッドで最初に呼び出すべきものです。それはあなたが持っている問題を解決しませんが、それは間違いなくあなたがやってはいけないことです。 –

答えて

3

まず、NSUserDefaultsの1つのインスタンスですべての3つの変更に十分です。ファイルシステムへの変更を直ちに 'プッシュ'するには、[userDefaults synchronize];と呼ぶことができます。そうしないと、変更内容がすぐに保存されるという保証はありません。 Appleは、変更を保存するのを待つことができない場合にのみ、このメソッドを呼び出すことを提案しています。

あなた viewDidLoad:方法で
- (IBAction)saveButton:(id)sender { 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setObject:titleTextfield.text forKey:@"titletext"]; 
    [userDefaults setObject:detailstextfield.text forKey:@"details"]; 
    [userDefaults setInteger:selectedCategory forKey:@"category"]; 
    [userDefaults synchronize]; 
} 

、アプリケーションの整合性をテストするために、出力に保存された値を試してください。

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"details"]); 
+0

また、アプリをテストしてすぐに終了すると、アプリが実行されている短時間に保存されない可能性が高くなります。私はそれに対処しなければならなかった。 – fscheidl

+0

'synchronize'は、結果をディスク(iOSのフラッシュストレージ)に書き込むだけです。ユーザのデフォルトに設定した値を読み込むために 'synchronize'を呼び出す必要はありません。 –

+0

最初にディスクに何も保存されていない場合、どのようにユーザーのデフォルトを読み取ることができますか? – fscheidl

関連する問題