1

2 つの文字列と int を取るアプリを作成しています。これらを別のビューに表示したい。

それらを配列に入れて、NSUserDefaultsに保存しようとしています。このデータを保存することに成功しました。私が抱えている問題は、データを変更して再度保存すると、配列を取得する関数が、それを設定する関数の前に呼び出されることです。そのため、アプリケーションは常に以前のデータを表示します。

関数が呼び出されるタイミングを変更することで簡単に修正できると思いました。

しかし、コードからは、それらが正しい順序になっているように見えます。

2012-09-26 13:55:02.764 BeerDivider[4377:907] array returnd = (
    2,
    "Person 1",
    "Person 2"
)
2012-09-26 13:55:02.773 BeerDivider[4377:907] array saved = (
    5,
    "Person 1",
    "Person 2"
)

配列をログに記録すると、それらが間違った順序で呼び出されていることがわかります。

どこが間違っているのか誰でもわかるようにしてください。これは私の最初の目的の c/xcode 投稿なので、どのコードを見たいかわかりません。全部入れます。

http://pastebin.com/BX5gqp17

これが多くのコードである場合は申し訳ありません。

助けてくれてありがとう。

編集:コードを更新

EDIT2: 何が起こっているかは、iOS が prepareSegue の前にボタンのアクションを実行するのと似ていると思います

4

2 に答える 2

3

最初にNSUserDefaultの Apple ドキュメントを見てください
NSUserDefault は常に保存したデータを返します

書き忘れないで [defaults synchronize];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:yourArray forKey:@"YourKey"]
    [defaults synchronize];

あなたの与えられたコードによると。

-(void)saveInfo:(NSArray *)myArray
    {
         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:myArray forKey:@"array"];
    [defaults synchronize];
    NSLog (@"array saved = %@", [defaults objectForKey:@"array"]);
    }  

そして今、結果を確認してください

于 2012-09-26T13:16:52.197 に答える
1

これを行う:

-(void)saveInfo:(NSArray *)myArray
{
    [[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"array"];
    [[NSUserDefaults standardUserDefaults] synchronize]; //u forgot this
    NSLog (@"array saved = %@", myArray);
}
于 2012-09-26T13:18:40.793 に答える