xcode - 为什么在我的 RootViewController :viewDidLoad method? 之后突然调用我的应用程序委托(delegate)的 didFinishLaunchingWithOptions 方法

标签 xcode iphone-sdk-3.0 interface-builder ipad

我一直在 Xcode 中使用 iPad 的 SplitView 模板。以下是基于 Split View的应用程序模板为您自动生成的许多重要方法中的两个...

AppNameAppDelegate.m

#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after app launch    
    rootViewController.managedObjectContext = self.managedObjectContext;


    // Add the split view controller's view to the window and display.
    [window addSubview:splitViewController.view];
    [window makeKeyAndVisible];

    return YES;
}

RootViewController.m
#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {

    [super viewDidLoad];
    self.clearsSelectionOnViewWillAppear = NO;
    self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);

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

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
}

当您在进行任何更改之前构建并运行项目时,application:didFinishLaunchingWithOptions方法在 RootViewController:viewDidLoad 之前调用方法被调用。我是 iPhone 开发的新手,但我假设这是正确且典型的顺序。所以这是我所做的更改...
  • 一旦我确认一切正常,无需任何修改,我更改了 RootViewController 代码并将其设置为 UIViewController 的子类(而不是 UITableViewController 默认情况下)并在 Interface Builder 中进行了相应的调整。我构建并运行,一切仍然正常。
  • 然后,我在 IB 的 RootView 中添加了一个 UIView(其中没有任何内容),当我构建并运行它时,突然 RootViewController:viewDidLoadapplication:didFinishLaunchingWithOptions 之前被调用方法。

  • 我需要让它恢复到之前的工作方式,因为正如您在代码中看到的那样,viewDidLoad 方法依赖于 didFinishLauchingWithOptions 方法来执行,因此它可以设置 rootViewController 的 managedObjectContext它用于执行获取请求。
  • 任何想法是什么原因造成的?
  • 有什么想法可以解决这个问题吗?

  • 非常感谢您的帮助!我将继续研究和使用代码。

    最佳答案

    在模板app中-applicationDidFinishLaunching将RootViewController的view添加到窗口中,导致view加载,所以很明显-viewDidLoad会跟在-applicationDidFinishLaunching后面。

    ViewDidLoad 是(间接)从 applicationDidFinishLaunching 调用的。

    如果如您所说, viewDidLoad 在 applicationDidFinishLaunching 之前被调用,那是因为您在调用 applicationDidFinishLaunching 之前做了一些事情来导致 View 加载。

    您是否在 -viewDidLoad 中添加了断点并查看堆栈跟踪以查看调用它的原因?

    关于xcode - 为什么在我的 RootViewController :viewDidLoad method? 之后突然调用我的应用程序委托(delegate)的 didFinishLaunchingWithOptions 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2853589/

    相关文章:

    iphone - 将CATiledLayer添加到UIView时出现无限循环

    非分组表的 UITableView 部分标题高度

    cocoa - NSViewController 和 Nib 中的多个 subview

    interface-builder - 在 UITextField 中使用自定义字体会导致它在访问时略微移动——有没有解决办法?

    ios - SF UI Text-Light(New san francisco)字体不起作用

    c++ - ffmpeg armv7s 编译段错误

    ios - iOS 中应用程序名称后添加 ".app"

    快速错误 : 'EnumName' has a raw type that depends on itself

    iphone - 如果不存在,创建一个空白文件?

    iphone - 如何在 iOS 的 Google map 上添加按钮?