0

コアデータをうまく活用するプロジェクトを行っています。私は数ヶ月前からそれを使用しています。小さな問題があります。Student という名前のエンティティと Courses という名前のエンティティの 2 つの異なるエンティティがあります。Student と Courses の関係は 1 対多です。リモートjsonからエンティティを頻繁に更新しています。そのため、コース エンティティには、学生エンティティとは関係のないダングリング ポインターが存在することがあります。このタイプのエンティティは削除する必要があります。そのようなオブジェクトを削除するにはどうすればよいですか?

              Courses(points to student) <------------- Student ----------------> Course (Points to student) 
                                                           |
                                                           |
                                                           |
                                                           |
                                                Course (Points to student)

                       Course(has no pointer to student, no foreign key to relate with student)
4

2 に答える 2

1

学生がいないときにコースを削除する必要がありますか? ただし、コースは有効な場合があります。関係を無効にする必要があると思います。そのため、学生を削除すると、その学生を指すすべてのコースがその学生を参照しなくなります。

私の意見では、それらが無効になるように、おそらく関係削除ルールを確認する必要があります。

于 2012-07-05T11:55:17.267 に答える
0

これを行う簡単な方法は、フェッチ リクエストを作成し、 に対してクエリを実行することCoursesです。明らかに、学生なしでNSPredicateを削除するには、を使用する必要があります。Courses

と呼ばれるCoursesへの逆関係がある場合、次の述語を設定できます。StudentcoursesToStudent

[NSPredicate predicateWithFormat:@"coursesToStudent == nil"];

ここで、 とCourses1 対 1 の関連があるとしStudentます。

このようにして、取得リクエストの結果はCourses学生なしで取得されます。その結果、呼び出しdeleteObjectて完了です。

述語を使用してフェッチ要求を設定する方法については、nil 値の NSFetchedResultsController をフィルター処理しますか? を参照してください。.

あなたのモデルについては、別のモデルをセットアップします。たとえば、次の 3 つのエンティティを使用します。

Student
Course
Enroll

どこ

Student
- attributes you want
- toEnroll [one-to-many rel to Enroll with cascade rule]

Course
- attributes you want
- toEnroll [one-to-many rel to Enroll with cascade rule]

Enroll
- attributes you want
- toStudent [one-to-one rel to Student with nullify rule]
- toCourse [one-to-one rel to Course with nullify rule]

それが役立つことを願っています。

于 2012-07-05T12:45:02.717 に答える