0

概要:

コアデータを使用しているiOSプロジェクトがあります

  • 私にはEmployees実体と実体がありDepartmentます。
  • 1つの部門に多くの従業員を含めることができます
  • したがって、エンティティDepartmentはエンティティと「多すぎる」関係を持ちEmployees、その関係は呼び出されemployees、逆の関係は呼び出されますwhichDepartment

目的-1:

特定の部署の全社員を削除したい

質問:

a)次は正しいですか、それとも突然変異やいくつかの問題を引き起こしますか?

b)これは正しい方法ですか?

Pls注-removeEmployeesエンティティのサブクラスの作成中に自動生成されたメソッドです

- (void) deleteAllEmployeesForDepartment: (Department*) requestedDepartment
{
    [requestedDepartment removeEmployees:requestedDepartment.employees];
}

目的-2:

  • 何らかの条件で従業員を削除したい
  • フェッチされたレコードの高速列挙ループ内のオブジェクトを削除しています

質問:

c)次は正しいですか、それとも何らかの突然変異を引き起こしますか?

d)高速列挙でオブジェクトを変更するようなものですか?

e)それを行うためのより良い方法はありますか?

Pls注-removeEmployeesエンティティのサブクラスの作成中に自動生成されたメソッドです

- (void) deleteAllType1EmployeesWithDepartment: (Department*) requestedDepartment
{ 
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"type == %i AND whichDepartment ==%i", 1, requestedDepartment.departmentID];

    NSError *error;
    NSArray *listOfEmployeesToBeDeleted = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];    

    for(Employees *currentEmployee in listOfEmployeesToBeDeleted)
    {       
       [self.managedObjectContext deleteObject:currentEmployee];
    }
}
4

1 に答える 1

0

まず、deleteAllEmployeesForDepartment:this では、オブジェクトをそのように削除しても問題ありません。

さらに、Core Data からEmployeesオブジェクトを削除する場合は、カスケードに設定された削除ルールを追加する必要があります。 ) 、それ()も削除されます。EmployeeDepartmentDepartmentDepartmentEmployeeEmployee

2 番目の質問はもう少し興味深いものです。

私がお勧めするのは、別のメソッドを の Department サブクラスに直接追加することです。NSManagedObejectそれを呼び出すことができます -clearEmployeesOfType:タイプ番号を渡します。

対多関係を介してofへDepartmentの参照があるため、それを使用して、必要なものを除外する方法です。NSSetEmployeesNSSetfilteredSetUsingPredicate:

返されるセットは、次のように、 のremoveEmployees:メソッドにメッセージを送信するために使用できDepartmentます (警告、コードはテストされていません)。

- (void) clearEmployeesOfType:(NSUInteger)type
{ 
    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"SELF.type == %d", type];
    NSSet * firedEmployees = [self.employees filteredSetUsingPredicate:predicate];

    [self removeEmployees:firedEmployees];
}

オブジェクトをロードして 1 つずつ削除するのではなく、可能な限り、このソリューションをお勧めします。コア データのリレーションシップと削除ルールに依存します。

于 2012-05-12T02:11:54.190 に答える