[英]Is it possible to delete unreferenced objects automatically in Core Data?
我的數據模型包含兩個實體:作者和具有一對多關系的書(一個作者可能寫幾本書)。
假設數據庫中只有兩本書和兩名作者,如下所示:
假設進行了以下更改:
結果:
我的問題:是否可以配置數據模型,以便在沒有任何書引用時會自動刪除諸如Author Y之類的對象?
查看“刪除傳播”。 它可以解決這個問題。
如果這不能完全滿足您的需求,則可以:在Book實體上覆蓋- (void)prepareForDeletion
,然后檢查在上下文中注冊並有未決更改的所有Author(因為它們的相反值已更改) )並且沒有書籍:
{
// ...
[[NSNotificationCenter defaultNotificationCenter] addObserver:self selector:@selector(deleteOrphanedAuthors:) name:NSManagedObjectContext object:moc];
// ...
}
- (void)deleteOrphanedAuthors:(NSNotification *)note;
{
NSManagedObjectContext *moc = [note object];
NSManagedObjectModel *mom = [[moc persistentStoreCoordinator] managedObjectModel];
NSEntityDescription *authorEntity = [[mom entitiesByName] objectForKey:@"Author"];
for (NSManagedObject *author in [moc updatedObjects]) {
if ([author entity] == authorEntity) {
if (![author hasFaultForRelationshipNamed:@"books"] && ([[author books] count] == 0)) {
[moc deleteObject:author];
}
}
}
}
注意:您不能將nil
作為要觀察的對象(即上下文)傳遞,因為您使用的框架可能有自己的上下文,並且您不想弄亂它們。
另外,請注意,如果出現錯誤,此代碼應謹慎操作,不要碰到author
對象。 如果刪除了一本書,Core Data將更改相應作者對象的反向關系,從而導致該關系中的錯誤,從而不再是錯誤。 代碼只對這些對象進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.