オブジェクトを削除することと、関係からオブジェクトを削除することを混同しています。
まず、関係の削除ルールを確認します。
削除ルールが「nullify」の場合、オブジェクトを削除せずにリレーションシップからオブジェクトを削除できることを意味します。これは、この場合に必要なことのように聞こえます。タグを使用する他のすべてのノートに影響を与えることなく、特定のノートとの関係からタグを削除できるようにする必要があります。
新しいタグのセットとの関係を実際に修正することに関して、あなたができることが2つあります。最初の方法は、あなたが述べたように、メモからすべてのタグを削除して、それらを再度追加することです。それは実際にはかなり良い計画です。もちろん、タグを追加するときは、タグごとに、最初に存在するかどうかを確認する必要があります。存在する場合は、既存のタグをリレーションシップに追加します。
擬似コードの場合:
- 現在のメモからすべてのタグを削除します。
- 追加したいものを保持するために、可変セットを作成します。
- リンクされたタグの文字列の新しい配列を取得します
- タグ文字列ごとに、次の手順を実行します。
- その名前のTagオブジェクトを見つけるための述語を作成します。フェッチ要求を作成して実行します。
- 結果を確認します。返されたタグがある場合(つまり、結果の配列に0を超えるオブジェクトが含まれている場合)、それを可変セットに追加します。
- 返されたタグがなかった場合(つまり、その名前のタグがない場合)、新しいTagオブジェクトを作成します。それを可変セットに追加します。
- Noteの
tags
プロパティを新しいタグのセットに設定します。
これを行う別の方法は、関係からタグを一度に1つずつ追加および削除できるようにすることで、を呼び出すことNSMutableSet *mySet = [yourNote mutableSetValueForKey:@"tags"]
です。これにより、タグオブジェクトの変更可能なセットが返され、セットに加えた変更はCoreDataによって自動的に認識されます。そのため、オブジェクトを削除すると、そのオブジェクトは関係から外れるか、セットに別のタグを追加して、メモに関連付けられるようになります。
このいずれにおいても、データベースからオブジェクトを削除することはありませんでした。すべてのタグはまだ存在します。どのタグがどのノートに関連しているかを変更しただけです。