2012-03-13 110 views
0

我正在为iPhone(iOS 5)的应用程序工作。我必须做的是使用我从服务器获得的二进制数据创建一张地图。有些问题确实工作得非常好:iOS 5数据存储:核心数据,SQL或其他选项?

  • 我可以连接到服务器,发送请求并接收二进制数据
  • 我可以interprete这个数据,从它创建对象(多边形和路径)和内吸引他们一个视图

但现在它涉及到困难的部分。我创建的地图应该是可缩放和可移动的。所以我必须发送新的请求到服务器并重新绘制地图。这也很好,但我现在收到的数据需要存储,因为我不应该从服务器两次请求相同的数据(例如,如果我缩小然后返回)。

最后,这里是我的问题:什么是最好的方式来存储我的数据?到现在为止,我想到了使用CoreData或SQLite。还有更好的解决方案吗?我应该保存哪些数据 - 二进制数据还是我创建的对象?

我希望这是可以理解的,你能帮助我与我的问题中的至少一个...

回答

1

核心数据是唯一的出路。核心数据不是存储系统,是一个对象图和持久性框架,女巫可以使用SQlite存储数据。

如果使用核心数据,则可以重构项目并将managedObjects子类用作模型。

看看Core Data Programming GuideThe differences between Core Data and a Database

编辑:

Core Data Performance

核心数据能够处理大量数据的丰富和复杂的对象图管理 框架。 SQLite 商店可以通过数十亿行/表/列扩展到TB级数据库。除非您的实体本身具有非常大的属性(尽管参见“大数据对象(BLOB)”)或较大的属性数量,10,000个对象被认为是相当小的数据集大小。

+0

感谢您的超级快速回答。所以你的意思是我应该保留我的对象并使用CoreData访问它们。我能帮你吗?这仍然是大量数据的最佳选择吗? – Bautzi89 2012-03-13 14:32:38

+0

我已编辑我的帖子。如果您必须保存斑点,您可以将它们保存到文档目录,并在数据库中只保存它的路径。 – 2012-03-13 15:26:09

+0

再次感谢您的帮助。现在我有一点要从头开始。 – Bautzi89 2012-03-14 08:26:50

1

这实际上取决于数据对象的大小以及如何访问它们。如果你的对象很小,你可以将它们存储在核心数据中。但是,如果您的地图数据来自一堆URL的图像,我会使用Core Data将映射存储到地图图像URL并使用NSURLConnection来管理对象的缓存。

我推荐阅读Apple Core Data Programming Guide Large Data Objects (BLOBs),它讨论了对象的大小和数量。一些摘录如下:

“小”,“适度”和“大”的确切定义是流畅的,取决于应用程序的用法。一个宽松的经验法则是,大小为千字节大小的对象大小适中,大小大小为兆字节大小。

对于小到中等大小的BLOB(和CLOB),应该为数据创建一个单独的实体并创建一对一的关系来代替该属性。

但是,如果您能够将BLOBs作为资源存储在文件系统中并维护对这些资源的链接(如URL或路径),则更好。然后您可以根据需要加载BLOB。

+0

谢谢你的回应。我没有收到来自服务器的图像数据,但是包含具有经度和纬度的点的对象。此外,我还为每个对象获取渲染规则,所以我知道如何绘制它。你能否定义你认为是“小”的对象 – Bautzi89 2012-03-14 07:48:24

+0

用对象大小信息更新了答案。 – Eric 2012-03-14 18:01:25