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

Ios 核心数据:在loadView中执行获取请求?,ios,core-data,uiviewcontroller,Ios,Core Data,Uiviewcontroller,我有一个UIViewController子类,它的视图是在loadView方法中以编程方式创建的。该视图的主要目的是显示通过核心数据从存储中获取的信息。视图的创建方式将根据从fetch接收到的实体数量而有所不同,因此我需要提前获得这些信息。我相信到目前为止我看到的所有教程和示例代码都显示了在viewDidLoad或更高版本中执行的获取请求,所以我只想问一下是否有任何理由避免在loadView中执行此操作。如果我在loadView中像so或viewDidLoad那样使用抓取,会有什么区别吗?谢谢

我有一个UIViewController子类,它的视图是在loadView方法中以编程方式创建的。该视图的主要目的是显示通过核心数据从存储中获取的信息。视图的创建方式将根据从fetch接收到的实体数量而有所不同,因此我需要提前获得这些信息。我相信到目前为止我看到的所有教程和示例代码都显示了在viewDidLoad或更高版本中执行的获取请求,所以我只想问一下是否有任何理由避免在loadView中执行此操作。如果我在loadView中像so或viewDidLoad那样使用抓取,会有什么区别吗?谢谢

- (void)loadView {
    [super loadView];

    NSError *error = nil;
    if (![self.fetchedResultsController performFetch:&error]) {
        ///
    }

    //...go on to load the view
}

INIT听起来可能是一个很好的地方。如果您在视图控制器的每个设置拆卸周期中加载一次数据,那么将其放入loadView就可以了

但是,如果有任何按钮或UI输入可能导致重新加载,则可能需要在视图控制器中创建自己的重新加载数据方法

请看一些使用核心数据的UITableView示例,以了解在Cocoa中加载核心数据对象的常用方法。UITableView使用飞轮模式,这意味着它重用表单元格行对象,并在运行时插入新数据

如果CD中有很多实体返回,请考虑使用UITabLVIEW,如果需要的话,您可以将其设置为与规范完全不同。

在VIELDDIAD中执行FETCH是很好的。最重要的是在何处调用自定义视图对象的方法。根据您的解释,数据获取应该在之前完成,因此只需确保您的[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类中的每个方法都有特定的用途,对于您了解应用程序的体系结构,最终对于其他人也了解应用程序的体系结构,遵守约定非常有帮助。然而,它不是强制的,所以你可以做任何你想做的事情


如果您真的想独立于其他视图对象初始化实例变量,我建议您使用-idinitWithNibName:NSString*nibName bundle:NSBundle*nibBundle

此视图控制器实际上是选项卡栏控制器的一部分。在这种情况下,我的印象是,在init内部执行任何类型的获取实际上都不是一个好主意,因为这样会导致在创建它们时在app委托中调用它们。如果视图从未实际加载,那么它将是一个不必要的获取。很抱歉,我以前应该指出这一点。视图中没有任何可以响应用户交互的按钮/等,但是它显示的数据可以在应用程序的其他地方更改。我想我可以使用loadView进行初始加载,然后设置一个通知,在VC需要刷新数据时提醒它。