概要:
- 自動生成された NSManagedObject サブクラスで提供される remove メソッドを使用して NSManagedObject を削除します
- 次に、データベースを保存しようとします
- データベースの保存に失敗しました。
.
- (void)removeEmployees:(NSSet *)values; //Auto generated method in Department.h
ただし、 add メソッドを使用して NSManagedObject を追加すると、データベースを正常に保存できます
- (void)addEmployeesObject:(Employee *)value; //Auto generated method in Department.h - works fine
注: XCode によって生成された NSManagedObject サブクラスを使用しています。
エンティティの詳細:
- 「従業員」と「部門」という2つのテーブル(エンティティ)があります
- 1 つの部門に複数の従業員を含めることができます
- 1 人の従業員は 1 つの部門にのみ所属できます
関係の詳細:
- 「従業員」から「部署」への関係は、1 対 1 の関係であり、「どの部署」と呼ばれます。削除ルールは無効化
- 「部署」から「従業員」への関係は多対一の関係であり、「従業員」と呼ばれます。削除ルールはカスケードです
問題:
「Department」クラスには下記のようなメソッドがあり、このメソッドを使用するとデータベースの保存がうまくいきません
(void)removeEmployees:(NSSet *)values; //Auto generated method in Department.h //does not work
削除に使用されるコード:
- (void) removeEmployeesHavingAgeAsZeroWithDepartment: (Department*) department
{
NSMutableSet *employeesSetToBeRemoved = [[NSMutableSet alloc] init];
for(Employees *currentEmployee in department.employees)
{
if(currentEmployee.age == 0)
{
[employeesSetToBeRemoved addObject:currentEmployee];
}
}
[department removeEmployees:employeesSetToBeRemoved]; //causing the problem
}
データベースの保存に使用されるコード
[self.database saveToURL:self.database.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success)
{NSLog(@"DB saved");}];
質問:
- remove メソッドを使用した後にデータベースを保存できないのはなぜですか?
- このメソッドを実装する必要がありますか? 現在、このメソッドの実装は見当たりません。ヘッダー ファイルでしか見つけることができません。
- リレーションシップ (逆、削除ルールなど) は正しく設定されていますか?
答え:
- Jody の回答とコメント (5 月 17 日 4:39) を参照してください。問題をデバッグして根本原因を見つける方法についても説明されています。