繁体   English   中英

CoreData-在子上下文中管理文件引用

[英]CoreData - Managing file references in child context

我的CoreData模型具有一个具有Image属性的实体。 我一直通过将这些实体存储在文件系统中并仅在CoreData属性(即路径)中维护对文件的引用来管理这些实体的图像。

但是,我最近转向使用子托管上下文来处理编辑(这样,如果用户应该选择取消编辑,则可以轻松地放弃更改)。 这一切都很好,但是现在我有一个跟踪任何图像更改的问题,特别是如果用户更改了图像,我将无法再删除旧文件(不想在文件系统上建立孤立的文件)并替换它与新文件一起使用,因为如果用户取消更改,则旧文件现在将丢失。

如我所见,我有两个选择:

  1. 我跟踪业务层中的图像更改,仅在保存上下文后才删除任何旧图像,或者相反,如果上下文被丢弃/取消,则删除所有新图像。
  2. 我将图像属性更改为二进制数据类型(选中“允许外部存储”),然后让CoreData管理数据...在这种情况下,所有内容都应该可以正常工作。

寻找任何指导,以找出哪种方法更好,更重要的是–性能更高? 或任何其他替代解决方案/选项...

谢谢!

第一种方法会更好。 如果保存是可丢弃的,则可以这样做。 而且,除非图像通常很小,否则通常最好将其保留在外部。

删除旧图像的好地方可能是在托管对象的willSave()方法中。 查看changedValues查找旧的图像名称。 如果它与当前值不同,请删除旧值。

为了处理回滚的更改,我想到了两种可能性。

  • 通过查看即将回滚的新实例并删除其映像文件,以任何代码将更改回滚的方式进行处理。
  • 保存更改时,始终将新图像放在NSTemporaryDirectory()并使用willSave()将它们移动到永久位置。 然后,您无需执行任何回滚操作-您可以让iOS为您清除临时目录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM