iPhone iOS如何在删除实体时删除从Core Data实体嵌套关系引用的本地文件?
<p><p>我有一个核心数据模型定义如下:</p>
<p>一个用户有很多事件。每个事件可以有许多图片。关系具有“级联”删除规则。</p>
<p><strong>我正在尝试了解如何在实体消失时删除本地文件。核心数据实体在消失之前是否会调用某种 dealloc 或“finalize”方法?</strong></p>
<p>每个图片实体都有一个对存储在应用文档目录中的本地文件的引用。</p>
<p>当通过table view的commitEditingStyle删除用户时,我可以通过关系逐步删除图像并手动删除文件:</p>
<pre><code>- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
{
// Delete the managed object for the given index path
NSManagedObjectContext *context = [[ objectStore] managedObjectContext];
AppUser* managedObject = ;
//clean up local files before deleting the object
;
//now delete the object
;
// Save the context to remember deletion
NSError* error = nil;
if (!) {
/*
Replace this implementation with code to handle the error appropriately.
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
*/
NSLog(@"Unresolved error %@, %@", error, );
abort();
}
}
}
</code></pre>
<p><strong>但是,当通过其他方法删除实体时,当我的获取结果 Controller 收到通知时,嵌套关系不包含任何对象。</strong>用户的事件集将没有任何实体可以单步执行并删除本地内容。这是为关系设置“级联”删除规则的结果吗?</p>
<pre><code>- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
// UITableView *tableView = self.tableView;
//
AppUser* managedObject = anObject;
switch(type) {
case NSFetchedResultsChangeInsert:
withRowAnimation:UITableViewRowAnimationNone];
// withRowAnimation:UITableViewRowAnimationFade];
// atIndexPath:newIndexPath];
break;
case NSFetchedResultsChangeDelete:
withRowAnimation:UITableViewRowAnimationNone];
//these methods cannot find any content to delete
;
;
break;
case NSFetchedResultsChangeUpdate:
atIndexPath:newIndexPath];
;
break;
case NSFetchedResultsChangeMove:
withRowAnimation:UITableViewRowAnimationFade];
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您可以在 <code>NSManagedObject</code> 子类中实现 <code>prepareForDeletion</code> 方法。它在删除对象之前自动调用,因此您也可以从那里删除引用的文件。</p></p>
<p style="font-size: 20px;">关于iPhone iOS如何在删除实体时删除从Core Data实体嵌套关系引用的本地文件?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/10419201/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/10419201/
</a>
</p>
页:
[1]