我有一个UIViewController子类,它在loadView方法中以编程方式创建了它的视图。该视图的主要目的是显示通过核心数据从商店获取的信息。创建视图的方式会有所不同,具体取决于从提取中接收到多少实体,因此我需要提前获取此信息。我相信到目前为止我看到的所有教程和示例代码都显示了在viewDidLoad(或更高版本)中执行的获取请求,所以我只想询问是否有任何理由避免在loadView中执行此操作。如果我在loadView中使用fet或者在viewDidLoad中使用fetches会有什么不同吗?感谢。
- (void)loadView {
[super loadView];
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
///
}
//...go on to load the view
}
答案 0 :(得分:0)
INIT听起来可能是一个很好的地方。
答案 1 :(得分:0)
如果您在View Controller的每个设置 - 拆卸周期中加载一次数据,那么将它放在loadView中应该没问题。
但是,如果您有任何可能导致重新加载的按钮或UI输入,您可能需要在View Controller中创建自己的reloadData方法。
看看UITableView与Core Data的一些示例,以了解在Cocoa中加载核心数据对象的常用方法。 UITableView使用飞轮模式,这意味着它会重用表格单元格(行)对象,并且只需插入新数据。
如果您有很多CD返回的实体,请考虑使用UITableView,如果需要,您可以将其设置为与标准完全不同。
答案 2 :(得分:0)
在viewDidLoad
执行抓取很好。最重要的是调用自定义视图对象的方法。根据您的解释,数据提取应该在之前完成,因此在实际获取数据之前,请确保您的[super viewDidLoad]
或其他超类方法没有进行任何视图自定义。
因此,像这样组织viewDidLoad
将确保您获取数据并为视图做好准备:
- (void)viewDidLoad {
[super viewDidLoad] // 0: Make sure you are fully aware of what it's doing.
// 1: Fetch your data
// 2: Customize you view based on fetched data
}
如果我不使用nib文件,我只使用loadView
。来自viewController
类的每个方法都有特定的目的,为了让您了解应用程序的体系结构,并最终让其他人理解它,尊重约定非常有帮助。但是,它没有强制执行,所以你可以做任何你想做的事情。
如果你真的想要与其他视图对象分开初始化你的实例变量,我建议你改用- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
。