我是第一次使用核心数据,我的应用程序正在处理大量数据(至少1000多个被管理对象),因此加载某些视图需要一段时间。
示例:我的视图基本上包含一个包含特定核心数据实体信息的tableview。视图将包含10到100个项目(分组),我的加载时间为几秒钟。基本上这不是一个真正的问题,但我怀疑用户在视图加载时没有任何信息时会感到烦躁,直到它显示出来。
我在'viewWillAppear'中加载我的数据,因为每次因更改而必须重新加载。
问题:如何在视图加载时显示加载屏幕(进度指示器)?它不一定是花哨的,可能只是一个带有标准进度指示器的单色屏幕?
任何输入?
编辑:我设法将加载时间从apprx 3秒减少到几毫秒所以我不需要它在这个特定的项目中,但无论如何我认为这是一个值得问的问题=)所以我仍然对想法非常感兴趣=)
我已经阅读了本教程:Using AlertView For Progress Indication但我无法在一个小的测试项目中对其进行调整,以便在视图过渡期间使用。
塞巴斯蒂安
答案 0 :(得分:3)
您可以在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]
,并且当加载完成时(例如,用户可能已导航离开),视图可能不再出现在屏幕上。如何检查这取决于您的应用程序的确切工作方式。在某些情况下,它可能就像检查视图是否还有superview
或window
一样简单。
确保主线程上发生任何接口更新(因此,发送到dispatch_get_main_queue()
,因为操作系统需要这样做。
答案 1 :(得分:0)
这对我来说是一个有趣的问题,因为我现在正处理类似的问题。我也喜欢你引用的教程。这是一个试探性的答案:
AlertView教程将UIActivityIndicatorView作为子视图添加到警报视图中。但addSubview:
是父类UIView的一种方法 - 也就是说,您可以将其添加到任何视图中。因此,当您刷新tableView时,可以将其添加到当前可见的任何视图中,或者我想您可以为此目的在tableView后面插入额外的视图。
对于随附的解释性文本,如果活动指示器的主视图是文本视图,则只需将文本指定为textview的字符串。如果您想要更多地控制文本的位置和样式,请使用带有CATextLayer的NSAttributedString进行探索,您可以使用视图的addSublayer:
方法应用它。 (如果你使用最后一个建议,你需要导入图层的QuartzCore框架和属性字符串的CoreText。)