0

以前に NSUserDefaults を使用して、アプリケーションの設定セクションにいくつかの変数を保存しました。

ただし、現在、ユーザーが自分のレシピを入力して保存できるレシピアプリケーションを作成しています。各レシピには、タイトル、説明、日付などがあります。したがって、すべてのレシピを保存するには配列が必要になると思います。しかし、すべての新しいレシピを動的に追加するにはどうすればよいでしょうか?

つまり、配列の次の位置にレシピを保存し始めますか? ユーザーが 1 つのレシピを削除し、配列に空き位置があるとどうなりますか?

ここでの私のロジックは、データを保存する上で正しいですか? あなたならどうしますか?

4

1 に答える 1

5

NSUserDefaultsあなたが探しているものではありません。技術的にはそれでうまくいきますが、すべてのレシピ特性のプロパティを持つカスタム クラスを作成し、そのクラスを<NSCoding>プロトコルに準拠させて、データに変換して記述できるようにする方がよいでしょう。ファイルに。

やったことのない人にとっては複雑に聞こえるかもしれませんが、それほど悪くはありません。

を実装する例を次に示します<NSCoding>にデータを保存していることを示す最後の部分は無視してくださいNSUserDefaults

NSUserDefaults を使用する代わりにデータを保存するには、この質問をご覧ください。小さなタスクに大量のコードを追加するように見えるかもしれませんが、概念は非常に単純です。

編集:

オブジェクトをデータに変換するに<NSCoding>は、カスタム クラスに既に実装していると仮定します。

YourClass* someObject;

// do whatever you do to fill the object with data

NSData* data = [NSKeyedArchiver archivedDataWithRootObject:someObject];

/*
 Now we create the path to the documents directory for your app
 */

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
    NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

/*
 Here we append a unique filename for this object, in this case, 'Some_Recipe'
 */

NSString* filePath = [documentsDirectory stringByAppendingString:@"Some_Recipe"];

/*
 Finally, let's write the data to our file
 */

[data writeToFile:filePath atomically:YES];

/*
 We're done!
 */
于 2013-03-17T17:24:06.320 に答える