2011-12-20 9 views
0

NSMutableArrayをデバイスに保存しようとしていますが、アプリケーションをリロードするたびにデータが消去されます。NSMutableArrayをNSUserDefaultsに保存できません

私はNSUserDefaultsを使用しようとしたが、問題はここに

を持続し、私は私が何をやっている

-(void) addingData{ 

    [data addObject:theBarcodeString]; //data is the NSMutableArray 

    [mainTableView reloadData]; //this is a UITableView where the data from the NSMutableArray is populated 
    [self endText]; 
    history=[NSUserDefaults standardUserDefaults]; 
    [history  setObject:data   forKey:@"history" ]; 
} 

を使用して、ここで私は

- (void)viewDidLoad 
{ 
    ... 
    if (data == nil) { 
     data = [[NSMutableArray alloc] init]; //onload it always goes to his line 

    else { 

     data=[[NSUserDefaults standardUserDefaults] objectForKey:@"history" ]; 
    } 
    ... 
} 

データを読み込むところで午前のコードです違う ?

+0

なぜ 'data == nil'をテストしていますか? – kennytm

+0

がNSMutableArrayに既に保存されているかどうか確認してください。 – user1051935

答えて

3

data == nilであるかどうかをテストするべきではありません。代わりに、次のようにしてください:

data = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] 
    objectForKey:@"history"]]; 

これは後でリリースする必要があることに注意してください。

あなたは可変配列であることをdataをしたい場合は、あなた必要使用:

data = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"history"]; 

あなたがmutableArrayValueForKeyを使用せずに、データの操作を変異実行しようとすると、あなたはすべてのオブジェクトが返されるので、クラッシュを取得しますNSUserDefaultsからの変更は不変です。

+0

私は2番目のオプションを試しました。 – user1051935

+0

それがあなたを助けてくれてうれしい! –

0

同期はディスク に永続ドメインへの変更を書き込み、ディスク上にあるものに修正されていないすべての永続的なドメインを更新します。

  • (BOOL)のデータをディスクに正常に保存された場合はYES

戻り値を同期させる、そうでない場合は NO。

ですから、デフォルト

編集上の書き込みを強制的に[history synchronize]を追加する必要があります。あなたができない場合 にのみ、このメソッドを使用し、この方法は、一定の間隔で自動的に呼び出されるのでDocs

からであっても、自動的に の同期(たとえば、アプリケーションが終了しようとしている場合)または のユーザーのデフォルト値をディスク上に更新する場合は、 10あなたは何も変更を加えていません。

変更をすぐに保存したい場合は、[history synchronize]に電話してください。

+0

通常は、自分自身を呼び出す必要はありません。ドキュメントから: '定期的な間隔で自動的に呼び出される同期メソッドは、メモリ内のキャッシュをユーザーのデフォルトデータベースと同期させて保持します。 ' –

+0

あなたはsyncを呼び出しても機能しませんでしたか? –

+0

私は通常、applicationWillTerminate以外では同期を呼び出すことはありません –

関連する問題