核心数据 - 存储图像(iPhone)

Uri*_*zen 46 iphone storage image core-data

我有一个应用程序,我允许用户为他们的帐户添加图像.

我想知道如何使用Core Data存储图像(从相机或照片库中获取),因为我可能为用户提供备份工具,并希望将图像数据传输到服务器.

我遇到了创建Image模型对象并与模型对象创建一对一关系的设计建议User(以便除非需要,否则不会调用关联的Image对象).但是,我不确定如何实际存储图像,以及这在性能方面是否可能致命.

我会很感激任何尝试过这种做法的方法和陷阱的任何建议.

Mar*_*rra 84

在Core Data中存储图像数据的规则如下:

  • 相关实体中的<100 kb商店(人,地址,等等).
  • <1 mb存储在关系另一端的单独实体中,以避免性能问题.
  • 磁盘上存储1 MB,并引用Core Data存储中的路径.

您可以使用可转换数据类型将NSImage直接存储到Core Data中.实际上,您可以使用可转换数据类型来存储实现NSCoder协议的任何内容.

我个人不会将它转换为CGImageRef,因为你可以丢失很多信息.

  • @steipete现在iOS5不在NDA之下,我假设您指的是新的"...属性值的外部存储.如果您指定托管对象属性的值可以存储为外部记录,则核心数据启发式是否应该根据每个值决定是将数据直接保存在数据库中还是将URI存储到它为您管理的单独文件中." (8认同)
  • 它在文档中的一个小脚注,当我发现它时也震惊了我. (3认同)
  • 在iOS5中,有一些令人兴奋的新方法可以帮助您避免麻烦.检查文档,它仍然在NDA下. (2认同)
  • 仅供参考,外部存储在iOS上不起作用.它只是一个桌面标志. (2认同)
  • 我一直在一个小应用程序上使用外部存储标志,它似乎工作正常,但我想,根据马库斯,它没有做任何事情.我想这意味着我保存的照片只是在我的数据库中保存为大blob.我希望Apple会告诉我的! (2认同)

Eld*_*kov 29

自问这个问题以来已经过了一段时间,但我想分享一下我对这个问题的经验.


如果数量不受限制,我建议您不要在数据库中存储图像.您应该记住,有一天您将添加新版本的数据模型,并且您必须在App更新时从旧数据库迁移到新数据库.这需要时间.数据库文件越大,迁移所需的时间就越长.

如果要在DB中存储图像,请确保不要在application: didFinishLaunchingWithOptions:方法中添加持久性存储UIApplicationDelegate.如果迁移无法在XX秒内完成,iOS将终止您的应用.