2011-12-29 20 views
3

私は、別のNSManagedObjectと多対多の関係を持つNSManagedObjectを持っています。オブジェクトを削除するCoreDataGeneratedAccessorsが削除されていないようです

NSManagedObjectの作成中に、生成されたアクセサ 'removeNotesObject'を使用することができ、削除が正常に動作します。親オブジェクトに追加するオブジェクトを作成し、オブジェクトを保存し、オブジェクトを削除してから再度保存することができます。この親オブジェクトを取得すると、作成して削除したオブジェクトは削除されます。

ただし、オブジェクトを追加して保存した後(削除して保存しないでください)、オブジェクトをフェッチした後、以前に作成されたオブジェクトを削除できないようです。生成されたアクセサを使用してオブジェクトを削除しようとしていますが、これは動作するようですが、オブジェクトを再度フェッチするとオブジェクトは削除されません。

:私は、オブジェクトのセットを取得し、私が削除したいオブジェクトを選択したオブジェクトを削除するには

(注意、それは保存の問題ではありませんので、オブジェクトを追加する作業を行います)。次にオブジェクトを削除します

NSSet *notes = summary.notes; 
NSSet *oldNotes = [notes objectsPassingTest:^(id obj,BOOL *stop){ 
    Note *oldNote = (Note *)obj; 
    BOOL sameRow = (oldNote.row == newNote.row); 
    BOOL sameColumn = (oldNote.column == newNote.column); 
    BOOL success = (sameRow && sameColumn); 
    return success;}]; 
[summary removeNotes:oldNotes]; 

私はそれらを削除しなかったオブジェクトを削除するために逆の関係を作成しようとしました。私はまた別の削除ルール(カスケードと無効化)を試してみましたが、もう一度動作しませんでした。最後に、各オブジェクトを別々に削除し、親オブジェクトから削除した後に各オブジェクトをコンテキストから削除しようとしましたが、残念ながらそれが機能しませんでした。

問題はフェッチされたオブジェクトである必要があります。もし誰かがこの問題をテストしたり解決したりするための他の方法を考えることができないので、本当に感謝します。あなたは

NSManagedObjectContext * moc = .......; 
[moc deleteObject:note] 

編集を行う必要があり

答えて

0

上記のコードが機能しなかったのは、==が実際にNSNumberを比較しないためです。代わりに 'isEqualTo:'を呼び出す必要があります。私はそれを保存する前にそれが働いているので、アドレスをチェックしていた前に思っています。 NSSetのオブジェクトを戻していたことは、それが機能しているように見えました。デバッグ中にオブジェクトが何であるかはっきりしませんでしたが、私が必要としていたものではないことは明らかでした。

1

:コア・データは、単純な関係からオブジェクトを削除しますが、永続的にオブジェクトを削除していないアクセサを生成しました。リレーションシップを介して他の複数のNSManagedObjectsに関連付けられた1つのNSManagedObjectを持つ可能性があるため、これは意味があります。

編集:上記の方法で削除すると、削除ルールが呼び出されます。私は彼らが正しくセットアップされていることを再度確認することをお勧めします。

+0

ご提案いただきありがとうございます。私はオブジェクトを削除した後に 'deleteObject'を使ってみましたが、一時的にオブジェクトを削除している間に、オブジェクトを再フェッチした後に削除されません。削除ルールに関しては、私は現在削除ルールをカスケードとして設定しています。これはうまくいかず、無効化されません。 – Theo

+1

どのように再フェッチしていますか? NSManagedObjectContextを保存する必要があります。 managedObjectContextを保存するまで、変更はディスクに保存されません。 – lorean

+0

Yeh、私はオブジェクトと削除されたオブジェクトを同時に追加して保存したので、確実に保存しておきたいと思っていました。新しいオブジェクトは、オブジェクトを取得するときに追加されますが、他のオブジェクトは削除されません。 – Theo

関連する問題