0

レシピをplistからNSArray(カスタムオブジェクトRecipeの)にロードし、UITableViewに表示しています。
詳細ビューにレシピを追加するオプションをお気に入りビューに追加しました。

明らかに、ユーザーのお気に入りの選択を保存するオプションが必要なので、カスタムクラスをNSCodingに準拠させ、initWithCoderメソッドとencodeWithCoderメソッドをカスタムオブジェクトに追加しました。

アプリを再起動すると、お気に入りの配列が保存され、正しく再読み込みされます。
問題は、再起動するたびに同じレシピを追加できることです(アプリの実行中に、レシピを追加および削除できます)。

誰かが私が前回アプリを実行したときにすでに追加されたレシピを追加するオプションを無効にする方法を考えるのを手伝ってもらえますか?

4

2 に答える 2

2

メソッドを使用して配列をチェックできます。また、クラスに適切なメソッドを実装する[array containsObject:obj]必要があります。isEqual:

また、NSSetの代わりに を使用することを検討することもできます。これはNSArrayNSSetよりもオブジェクトの一意のセットに論理的に適合するためNSArrayです。NSSet を使用する場合でも、isEqual:実装する必要があります。

于 2013-03-04T19:25:11.383 に答える
1

-hash と -isEqual: をオーバーライドしてセットを使用することができます...その後、それらを何度も追加しようとすることができますが、セットはそれぞれの1つしか保持しないため、問題になりません...または使用し続けることができます配列を調べて、オブジェクトの配列を確認してください。

if ([someArray indexOfObject:someObj]==NSNotFound)
{
    [someArray addObject:someObj];
}
于 2013-03-04T19:24:48.900 に答える