核心数据:在loadView中执行获取请求?

时间:2011-06-06 03:17:27

标签: ios core-data uiviewcontroller

我有一个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
}

3 个答案:

答案 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