1

私はiPhone用の名前ジェネレーターアプリを作成していますが、これが私がやろうとしていることです。

  • ユーザーが保存ボタンをクリックして、現在生成されている名前を保存できるようにします。

これを行うために、次のことが行われています。

  • 現在の赤ちゃんの名前が に表示されますUILabel
  • ユーザーが「保存」を押すと、label.text 値が a に追加されますNSMutableArray(これが私のコードで正しく機能しているとは思いません)。
  • NSMutableArrayに保存されNSUserDefaultsます。
  • コンテンツは別のビューに読み込まれ、UITableViewセルに入力されます。

私の具体的な質問は、この保存/永続ストレージのプロセスを正しく処理していますか? 問題のスニペットは次のとおりです。

- (IBAction)saveName:(id)sender {
// save current baby name to array
NSMutableArray *babyNameArray = [[NSMutableArray alloc] init];

[babyNameArray addObject:babyname.text];

// save list of babynames to nsuserdefaults

[[NSUserDefaults standardUserDefaults] setObject:babyNameArray forKey:@"My Key"];


// for testing log names listed in nsuserdefaults
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

}

これは、ファイルの内容全体のペーストビンへのリンクです (コメント付き): http://pastebin.com/hQRM9Azh

4

2 に答える 2

7

追加するたび[[NSMutableArray alloc] init]に、既存の項目からではなく、空の配列 ( ) からやり直します。

代わりに、既存のエントリに追加するコードを次に示します。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *babyNameArray = [[defaults stringArrayForKey:@"My Key"] mutableCopy];
if (!babyNameArray) babyNameArray = [[NSMutableArray alloc] init];
[babyNameArray addObject:babyname.text];
[defaults setObject:babyNameArray forKey:@"My Key"];
[defaults synchronize];
于 2012-05-21T21:06:14.597 に答える
2

大きな問題に取り組む前に、いくつかのことがあります。まず、これらの名前の配列をファイルのどこかに保存する必要があります。このファイルは、アプリケーションの起動時またはViewWillAppear/に読み込まれますViewWillLoad

第 2 に、現在の作業方法では、一度に 1 つの名前しか保存できません。ユーザーが「名前を保存」ボタンをクリックするたびに、新しい(空の)配列を割り当てて初期化します。次に、現在の名前をこの (空の) 配列に追加し、それをキー「My Key」のオブジェクトとして設定します。「My Key」オブジェクトには常に 1 つの要素 (最後に保存された名前) しかないことに注意してください。

最後に、実際に変更を に保存することはありませんNSUserDefaults。私の記憶が正しければ、変更を加えた後、電話する必要がありsynchronizeます。そうしないと、アプリケーションが閉じるとすぐに変更が失われます。どのような種類のデータ永続性を使用する目的全体を殺します。:)

于 2012-05-21T21:06:39.407 に答える