CoreData - 在子上下文中管理文件引用
CoreData - Managing file references in child context
我的 CoreData 模型有一个具有图像属性的实体。
我一直通过将这些实体的图像存储在文件系统中并仅在 CoreData 属性(即路径)中维护对文件的引用来管理这些实体的图像。
不过,我最近转而使用子托管上下文来处理编辑(以便在用户选择取消编辑时我可以轻松放弃更改)。
这一切都很好,但是我现在有一个跟踪任何图像更改的问题,特别是如果用户更改图像我不能再删除旧文件(不希望在文件系统上建立孤立文件)并替换它与新文件一起使用,因为如果用户取消更改,旧文件现在将丢失。
据我所知,我有两个选择:
- 我跟踪我的业务层中的图像更改,并且仅在保存上下文后删除所有旧图像,或者相反地删除任何新图像,如果上下文是 discarded/cancelled。
- 我将我的图像属性更改为二进制数据类型(检查 'allows external storage')并让 CoreData 管理数据...在这种情况下一切都应该正常工作。
正在寻找关于哪种方法更好、更重要的是性能更高的指导?
或任何其他替代 solutions/options...
谢谢!
第一种方法会更好。如果保存是可丢弃的,那么这样做是有意义的。除非图像通常很小,否则通常最好将它们放在外部。
删除旧图像的好地方可能是托管对象的 willSave()
方法。查看 changedValues
以找到旧图像名称。如果与当前值不同,则删除旧值。
为了处理回滚更改,我想到了几种可能性。
- 通过查看即将回滚的新实例并删除其映像文件,在回滚更改的任何代码中处理此问题。
- 始终将新图像放在
NSTemporaryDirectory()
中,并在保存更改时使用 willSave()
将它们移动到永久位置。然后你不需要在回滚时做任何事情——你可以让 iOS 为你清除临时目录。
我的 CoreData 模型有一个具有图像属性的实体。 我一直通过将这些实体的图像存储在文件系统中并仅在 CoreData 属性(即路径)中维护对文件的引用来管理这些实体的图像。
不过,我最近转而使用子托管上下文来处理编辑(以便在用户选择取消编辑时我可以轻松放弃更改)。 这一切都很好,但是我现在有一个跟踪任何图像更改的问题,特别是如果用户更改图像我不能再删除旧文件(不希望在文件系统上建立孤立文件)并替换它与新文件一起使用,因为如果用户取消更改,旧文件现在将丢失。
据我所知,我有两个选择:
- 我跟踪我的业务层中的图像更改,并且仅在保存上下文后删除所有旧图像,或者相反地删除任何新图像,如果上下文是 discarded/cancelled。
- 我将我的图像属性更改为二进制数据类型(检查 'allows external storage')并让 CoreData 管理数据...在这种情况下一切都应该正常工作。
正在寻找关于哪种方法更好、更重要的是性能更高的指导? 或任何其他替代 solutions/options...
谢谢!
第一种方法会更好。如果保存是可丢弃的,那么这样做是有意义的。除非图像通常很小,否则通常最好将它们放在外部。
删除旧图像的好地方可能是托管对象的 willSave()
方法。查看 changedValues
以找到旧图像名称。如果与当前值不同,则删除旧值。
为了处理回滚更改,我想到了几种可能性。
- 通过查看即将回滚的新实例并删除其映像文件,在回滚更改的任何代码中处理此问题。
- 始终将新图像放在
NSTemporaryDirectory()
中,并在保存更改时使用willSave()
将它们移动到永久位置。然后你不需要在回滚时做任何事情——你可以让 iOS 为你清除临时目录。