在 tabBar didSelectItem 上加载核心数据的替代方法?还是加快速度?

Posted

技术标签:

【中文标题】在 tabBar didSelectItem 上加载核心数据的替代方法?还是加快速度?【英文标题】:Alternatives to loading core data on tabBar didSelectItem? Or speeding it up? 【发布时间】:2012-04-16 02:21:08 【问题描述】:

我正在为 didSelectItem 上的 TableView 加载核心数据,但这会使标签栏感觉迟缓,直到新数据加载后才会更新。解决此问题的好方法是什么?我可以在数据加载之前更新选项卡栏和空白表格视图,还是可以以某种方式显示活动指示器?

这是我当前的代码

- (void) tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 
NSInteger index = [item tag];
NSMutableArray *schedule = [dataHandler fetchEntriesForCourse:[[_Courses objectAtIndex:index] valueForKey:@"CourseCode"]];
tableView.schedule = schedule;

【问题讨论】:

您不能通过响应者链捕获菜单请求吗?在 Mac OS X 上,我知道我会这样做。 你的课程被索引了吗?在正常情况下,这真的不应该花很长时间...... 是的,它只是一秒钟左右,但如果你不知道它的加载,它似乎标签卡住或真的很慢,它会触摸标签->加载数据->标签更改 【参考方案1】:

您可以在后台线程中进行获取,使用 GCD 并在数据到来时填充表格视图。这是一篇关于在后台线程中使用 Core Data 的精彩文章。

http://www.cimgf.com/2011/05/04/core-data-and-threads-without-the-headache/

真的,如果您使用 fetchresultscontroller 捕获数据,您需要做的就是在另一个线程中进行 fetch。然后它会在 fetch 继续时自动捕获添加的新行。

【讨论】:

【参考方案2】:

我最终创建了一个 NSMutableArray 来在应用程序启动时存储数据,因此选项卡更改得更快,因为它不必获取核心数据。

【讨论】:

以上是关于在 tabBar didSelectItem 上加载核心数据的替代方法?还是加快速度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 上设置第一个以编程方式选择的 TabBar

UITabBar 获取选中项

在Extjs 的 TabPanel在 title标题栏上加按扭button

视图控制器可能不响应“activatetab”

小程序调用addVisualLayer显示自定义图层方法

(自动)在 tabbar1 中更新数组后,在 Tableview(tabbar2) 上重新加载数据(无需更改 tabbars)