载入数据密集型视图的屏幕

我第一次使用核心数据,而我的应用程序正在处理大量的数据(至less有1000多个pipe理对象),所以加载某些视图需要一段时间。

例如:我有一个基本上持有包含有关特定核心数据实体的信息的表视图。 视图将保持10至100 +项目(分组),我有加载时间几秒钟。 基本上这不是一个真正的问题,但我怀疑,当一个视图加载没有任何信息,直到它显示用户恼火。

我加载我的数据在'viewWillAppear',因为它必须重新加载每次由于变化。

问题:如何在加载视图时显示加载屏幕(进度指示器)? 它不一定是幻想,也许是一个单色屏幕与标准的进度指标之一?

任何投入?

编辑:我设法从apprx 3秒减less到几毫秒的加载时间,所以我不会需要它在这个特定的项目,但无论如何,我认为它的问题值得问= =所以我仍然非常感兴趣的想法=)

我已阅读本教程: 使用AlertView进度指示,但我无法适应它在一个小的testing项目在视图转换期间使用。

塞巴斯蒂安

你可以在viewWillAppear设置你喜欢的任何占位符视图,然后产生一个背景块来加载内容。 内容加载后,您将更新屏幕以显示它们:

 - (void)viewWillAppear { [super viewWillAppear]; [self loadPlaceholderSubview]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ [self loadData]; dispatch_async(dispatch_get_main_queue(), ^{ if ([self isStillNeeded]) [self updateSubviews]; }); }); } 

一些注意事项:

  • [self isStillNeeded]是需要的,因为数据在后台被加载,并且当加载完成时(例如,用户可能已经被导航),视图可能不再在屏幕上。 你如何检查这取决于你的应用程序如何工作。 在某些情况下,它可能像检查视图是否仍有超superviewwindow一样简单。

  • 确保在主线程上发生任何接口更新(因此调度到dispatch_get_main_queue()因为这是OS所要求的。

对我来说,这是一个有趣的问题,因为我现在刚刚开始了类似的问题。 我也喜欢你引用的教程。 这是一个试探性的答案:

AlertView教程将UIActivityIndi​​catorView作为子视图添加到警报视图。 但是addSubview:是父类UIView的一个方法,也就是说,你可以将它添加到任何视图。 所以你可以将它添加到刷新tableView时当前可见的任何视图,或者我想你可以在tableView后面插入额外的视图。

至于随附的说明性文字,如果活动指标的主视图是文本视图,则只需将文本分配为文本视图的string。 如果您想更好地控制文本的位置和样式,可以使用带有CATextLayer的NSAttributedString,使用视图的addSublayer:方法应用这个方法。 (如果你使用最后一个build议,你需要导入图层的QuartzCore框架和属性string的CoreText。)