【问题标题】:What is the most effective workflow for this iOS app?这个 iOS 应用程序最有效的工作流程是什么?
【发布时间】:2013-03-08 15:00:12
【问题描述】:

我有一个需要互联网才能将网络服务同步到本地核心数据数据库的应用程序。然后使用本地数据库获取来填充标签栏控制器中 MapView 和 TableView 的不同对象。我正在研究这两种情况:

“A”的主要优点是我不必用数据库预加载应用程序,尽管它的数据库很小(大约 100 条记录)。问题是它变得令人费解。如果没有互联网连接,在 MapView 中,用户会看到地图,但刷新按钮被禁用。所以这不是问题。但是用户仍然可以转到 tableview,他会看到一个空表。

“B”的主要优点是,使用预加载的数据库,应用程序将始终有一个数据源可供绘制和列出。不过,我真的不知道如何使用 db 预加载应用程序。

我有点想走第一条路线“A”。我的主要问题是,因为现在我禁用了 MapView 上的 refreshButton,因此它仅在从网络获取数据后才起作用...... sortedArray 在启动时为空。因此,如果用户访问 TableVC,它将是空的。就目前而言,用户必须先点击刷新按钮,然后才能进入 tableview。

解决这个问题最有效的方法是什么?

【问题讨论】:

  • 边缘案例,编写代码非常痛苦,但它们对用户体验非常重要。我认为“A”是你最好的选择(我的观点)。如果您没有初始数据 + 没有连接,您可以通过“您需要下载数据,获得互联网连接”来阻止整个应用程序的使用。您可以编写代码来处理用户在没有数据时可以访问的每个屏幕上的“无数据”场景。大多数表都包含一个“无数据”案例,它添加了一个通知用户的行。最佳答案取决于您的用例和要求,并且通常会因个人喜好而有所偏差。
  • 感谢 Dilip,我真的希望有一个 xcode 模块来处理逻辑,根据您的代码向您展示它是什么,因为我非常直观。 DBD,虽然我应该学习如何为首次启动场景等编写代码,但我确实认为用户应该需要互联网连接。我不太确定是否要阻止整个应用程序,但至少是“没有数据”的情况。虽然,这与阻止整个应用程序本质上是一样的,因为他们除了 shell 什么都看不到。再说一次,在用户体验方面,最好让他们看到一些东西。所以我很难过:(我想我需要走艰难的路
  • 好的,我在下面的答案中发表了评论,因为我进步了一些。但我喜欢你的意见,因为它仍然与你的评论有关。谢谢

标签: ios workflow logic


【解决方案1】:

如果 100 条记录足够静态,您可以随应用发送一组默认记录,那将是最佳解决方案。用户,无论有没有互联网,都会得到一个填充的表格视图。

将您的记录作为 plist 发送到您的应用程序包中。首次启动时,打开 plist 并将每个条目作为新对象添加到核心数据中。这种类型的“播种”发生得非常快。只需为 plist 创建一个集合(数组、字典),然后枚举,将其映射到 managedObject 的属性。

WWDC 2012 视频 iCloud 和 Core Data 中有代码向您展示了如何执行此操作(忽略 iCloud 部分)。

然后,如果在播种后有连接,您可以同步数据,这将更新/替换/等预填充的数据。

【讨论】:

  • 好的,感谢您提供的预加载数据。记录基本上是商店位置。大约每个月左右都会添加一条新记录。
  • 所以我不能用预加载的 Core Data db 发货?
  • 没有。核心数据向 sqlite 数据库添加了一堆表和关系以及各种特殊的东西,只有当你在你的应用程序中真正通过核心数据来做这些事情时才能做到。小心任何向您展示其他内容的博客文章!但别担心,播种并没有你想象的那么糟糕。
  • 好吧,你可以,Apple 在他们的一些示例代码(CoreDataRecipes)中做到了,但你仍然需要在设备上编写种子代码并以与种子相同的方式创建 sqlite/模拟器,将创建的 sqlite 复制到包中,从您的应用程序中删除种子代码。即便如此,我也会持怀疑态度。 Apple 推荐的程序是如上所述播种。
  • 我使用这种技术,尽管我不使用 CoreData。这是加载种子数据的好模式。我将数据从 plist 文件复制到文档文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2011-04-01
  • 2023-03-09
  • 2012-10-29
  • 1970-01-01
  • 2022-07-07
相关资源
最近更新 更多