我需要你的建议,我目前正在开发一个家庭应用程序。(一切都与家庭有关)
我想添加类似于家谱或家庭成员的东西。(使用表格视图)并且列表中的每个成员/元素都有自己的“视图”,其中包含关于他和他的照片的 50 个单词的传记。
从那以后,我还是 iOS 开发的新手,还没有使用过 SQLite。你们认为 SQLite 最适合这项工作吗?照片怎么样。有没有办法为每个成员放一张缩略图?
我需要你的建议,我目前正在开发一个家庭应用程序。(一切都与家庭有关)
我想添加类似于家谱或家庭成员的东西。(使用表格视图)并且列表中的每个成员/元素都有自己的“视图”,其中包含关于他和他的照片的 50 个单词的传记。
从那以后,我还是 iOS 开发的新手,还没有使用过 SQLite。你们认为 SQLite 最适合这项工作吗?照片怎么样。有没有办法为每个成员放一张缩略图?
不,我会为此使用CoreData。CoreData 为您提供了构建对象模型的图形建模工具,并处理了将对象图保存到磁盘所需的所有繁琐的内务处理。
您将作为常规文件存储在磁盘上的照片并由 CoreData 对象建模,该对象维护对照片的引用(URI 或文件路径)。
我会为此使用 CoreData,它归结为一个 SQLite 数据库,但 Apple 在 SQLite 数据库周围添加了自己的包装器,使其非常易于使用。
开发者网站上有许多示例应用程序以及许多 Tuts 可用,只需在 google 中搜索短语“CoreData example”即可,此处的链接是 ro Raywenderlich,这是一个很好的起点。我想一旦你浏览了这个博客,当你需要存储这样的东西时,你会越来越多地使用 CoreData。
关于缩略图存储,我会将它们存储在设备上并将文件的路径保存在数据库中。
SQLite 在这方面做得很好,尽管Core Data通常被认为是首选的 iOS 技术。在某些情况下,我可能会建议在 Core Data 上使用 SQLite,但您没有概述任何让我倾向于该方向的应用程序要求。
但是,如果您自己编写 SQLite,我建议您使用FMDB之类的东西,这样您就省去了编写 SQLite 代码的麻烦。
而且,正如我在对该问题的另一个答案的评论中提到的那样,关于 Core Data 或 SQLite 中的图像,您将面临显着的性能损失。如果您正在处理小图像(例如缩略图),那很好,但如果您正在处理大量大图像,您可能真的需要考虑将它们存储在 Documents 文件夹下的某个目录结构中(然后存储相对数据库中的路径名)。将图像从数据库中取出并使用 Documents 文件夹在架构上并不优雅,但出于性能原因,您可能希望准确地做到这一点。
是的,您可以为此使用 SQLite;事实上,考虑到它的关系性质,它是保存家谱的理想选择。
照片数据可以序列化为字节流 ( NSData *
) 并作为 blob 存储在列中。
数据库具有巨大的优势,您可以将所有内容存储在一个地方。
您也可以(我不推荐)使用文件夹结构来指定 /images/、/words/、/people/ 等数据,并为整个文件夹中的每个人使用相同的名称(tim.jpg、tim.txt、tim .dat)
或者使用小型数据库将所有内容存储在与您的“家庭(_members)”表相关的不同表中。
您还可以将图像存储在数据库中,主要是作为 blob(或 base64 编码或或或...哎呀)
我不知道 iOS 的东西如何处理 SQLite 的这些数据库类型,但你应该更好地使用数据库。
您在这里有很多选择。
如果您将所有信息存储在应用程序本身中(即,没有从某处的网络获取详细信息),那么 SQLite(作为 CoreData 后端)可能是一个好主意。阅读有关使用 CoreData 的内容,这样您就不会重新发明轮子,并且您的实现可以提供 iPhone 用户期望的流畅滚动体验。
然而,这些照片需要不同的存储/检索方式。
一种常见的技术是实现 2 级缓存系统。这需要将图片存储在单独的文件中,但为了提高速度,将其中一些图片保存在内存中。然后,您可以拥有一个类似于以下内容的类:
@interface ThumbnailManager : NSObject
{
id<ImageCache> _imageCache; // You make this.
}
- (UIImage *)imageForFamilyMemberWithName:(NSString *)name;
@end
这类似于我在你的位置上会做的事情。
祝你好运!