【问题标题】:How to preload data with Core Data如何使用 Core Data 预加载数据
【发布时间】:2013-10-08 16:48:18
【问题描述】:

我第一次创建了一个核心数据应用程序。它运行良好。我使用 Web 服务(使用 AFNetworking)使用数据创建了所有对象。我的物件都建好了。 所以,现在我想知道预加载数据的最佳方式是什么。 (网络服务>核心数据>我的观点) 就目前而言,它很简单,但绝对不是用户友好的,就是这样:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [ManagedMember loadDataFromWebService];
    [ManagedLesson loadDataFromWebService];
    [ManagedThematic loadDataFromWebService];
    [ManagedNew loadDataFromWebService];
    [ManagedProject loadDataFromWebService];

    return YES;
}

loadDataFromWebService 是一个调用两个连续函数的函数。 (删除核心数据对象中的所有数据并重新创建运行良好的对象) 所以,我想知道在哪里可以调用这 5 个函数?是否可以像许多 iOS 应用程序一样在启动画面中有加载程序?或者创建一个加载数据的中间视图。
非常感谢。

【问题讨论】:

  • 您不能在“didFinishLaunchingWithOptions”方法中预加载数据,我认为您应该将该代码放在 rootviewcontroller 的“viewDidLoad”方法中。
  • 是的,我试过了,但每次进入视图时它都会重新加载数据。
  • 您可以在 viewDidLoad (或其他方法)中执行此操作,但您需要设置一个标志,以便它不会再次尝试加载数据。如果此数据在第一次加载期间仅加载一次,请在 NSUserDefaults 中设置一个标志。否则,如果每次打开应用都会调用一次,只需设置一个 BOOL 并检查它以确保它不会再次被调用。

标签: iphone ios core-data view load


【解决方案1】:

永远,永远,永远不会在didFinishLaunchingWithOptions: 中加载这样的数据。这个方法应该做最少的必要,然后尽快返回。把慢的东西放在那里可能会导致糟糕的用户体验,如果你的应用程序没有足够快地退出该功能,iOS 可能会强制关闭你的应用程序。

正如 D-eptdeveloper 所建议的,viewDidLoad 是触发加载代码的更好位置,但它仍然不是很好。理想情况下,您在应用程序的早期触发数据加载,并且各个视图控制器只是根据需要请求数据(了解数据可能尚不可用,因此可能必须显示某种进度指示器)。

触发数据加载的合适地点/时间是在向用户显示初始 UI 之后。这减少了潜在的问题,即在更早的时间触发数据加载实际上会减慢 UI 的外观(不是良好的用户体验)。

【讨论】:

  • 另外,较长的启动时间可能会导致您的应用在从 Xcode 上传过程中被拒绝,并由“看门狗计时器”发出类似于“您的应用启动时间过长”的消息。这是作为整个审核过程的第一部分进行的第一次检查。
  • 那么我怎样才能在应用程序早期的某个地方开始我的数据加载呢?那是我的问题。但是,是的,viewDidLoad 是一个解决方案。 @oculus
  • @Benjamin 对我的回答添加了评论。
【解决方案2】:

可以在 AppDelegate 中触发同步(在 applicationDidBecomeActive: 方法中),因为它是执行代码的第一个位置。只需确保在后台线程中完成所有同步即可。

这个话题很笼统,但是你可以在网上找到关于同步策略的好例子,例如How To Synchronize Core Data with a Web Service – Part 1.

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2020-04-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多