我应该使用SQLite添加此功能吗?

时间:2012-08-02 15:42:33

标签: objective-c ios sqlite

我需要你的建议,我正在开发一个有点家庭的应用程序。(一切都与家庭有关)

我想添加一些类似于家谱或家庭成员的东西。 (使用表视图),列表中的每个成员/元素都有自己的“视图”,其中包含关于他和他的照片的50个单词的传记。

因为,我还是iOS开发的新手,我还没有使用SQLite。你们认为SQLite是最适合这份工作的吗?照片怎么样有没有办法为每个成员添加缩略图照片?

6 个答案:

答案 0 :(得分:2)

没有。我会用CoreData来做这件事。 CoreData为您提供了图形建模工具,用于构建对象模型并处理将对象图持久保存到磁盘所需的所有繁琐内务管理。

您将作为传统文件存储在磁盘上的照片,并由CoreData对象建模,该对象维护照片的引用(URI或文件路径)。

答案 1 :(得分:2)

我会使用CoreData,它归结为一个SQLite数据库,但Apple在SQLite数据库中添加了自己的包装器,使其非常易于使用。

开发者网站上有许多示例应用以及通过搜索谷歌中的短语"CoreData example"可用的众多Tuts,这里的链接是ro Raywenderlich,这是一个很好的起点。我想一旦你浏览了这个博客,当你需要存储这样的东西时,你会越来越多地使用CoreData。

关于缩略图存储,我会将它们存储在设备上并保存数据库中文件的路径。

答案 2 :(得分:2)

SQLite做得很好,但Core Data通常被认为是首选的iOS技术。在某些情况下,我可能会建议使用SQLite而不是Core Data,但是您没有概述任何可以让我倾向于这个方向的应用程序要求。

但是,如果您使用自己的SQLite,我建议您使用类似FMDB的内容,这样您就可以省去编写SQLite代码的麻烦。

而且,正如我在此问题的另一个答案的评论中所提到的,关于Core Data或SQLite中的图像,您将面临重大的性能影响。如果你正在处理小图像(例如缩略图),那很好,但是如果你正在处理很多大图像,你真的可能要考虑将它们存储在Documents文件夹下的某些目录结构中(然后存储相对数据库中的路径名称)。将图像从数据库中取出并使用Documents文件夹在结构上并不优雅,但出于性能原因,您可能希望这样做。

答案 3 :(得分:1)

是的,你可以使用SQLite;事实上,考虑到它的关系性,它是持有家谱的理想选择。

照片数据可以序列化为字节流(NSData *)并作为blob存储在列中。

答案 4 :(得分:1)

数据库拥有庞大的专业人士,您可以将所有内容保存在一个地方。

你可以(不是我推荐的)也使用文件夹结构来指定数据,如/ images /,/ words /,/ people /,并为整个文件夹中的每个人使用相同的名称(tim.jpg,tim。 txt,tim.dat)

或者使用一个小型数据库将所有内容存储在与“family(_members)”表相关的所有表中。

您还可以将图像存储在数据库中,主要是作为blob(或base64编码或或或... yuck)

我不知道iOS的东西如何处理SQLite的数据库类型,但你应该更好地使用数据库。

答案 5 :(得分:0)

这里有很多选择。

如果要在应用程序本身中存储所有信息(即,没有从Web上获取详细信息),SQLite(作为CoreData后端)可能是个好主意。阅读使用CoreData,以便最终不再重新发明轮子,以便您的实现提供iPhone用户期望的平滑滚动体验。

然而,这些照片需要不同的存储/检索方式。

常见的技术是实现2级缓存系统。这将需要将图片存储在单个文件中,但在检索速度之后将其中的一些保留在内存中。然后,您可以拥有一个类似于以下内容的类:

@interface ThumbnailManager : NSObject
{
    id<ImageCache> _imageCache; // You make this.
}

- (UIImage *)imageForFamilyMemberWithName:(NSString *)name;

@end

这与我在你的位置上做的事情类似。

祝你好运!