Ios 设置“a”有什么不同;自定义类“;对于情节提要视图控制器或子类化UIViewController并创建其实例?

Ios 设置“a”有什么不同;自定义类“;对于情节提要视图控制器或子类化UIViewController并创建其实例?,ios,objective-c,Ios,Objective C,我刚刚创建了一个简单的主细节应用程序(SplitViewController) 如果我创建一个名为MYCustomSplitViewController的新File-Objective-C类,并从UISplitViewController子类化/继承,我可以做两件事: 进入Main.Storyboard,选择分割视图控制器,并在Identity Inspector中将其“自定义类”设置为“MYCustomUISplitViewController” 现在,当加载分割视图控制器时,我在MYCus

我刚刚创建了一个简单的主细节应用程序(SplitViewController)

如果我创建一个名为MYCustomSplitViewController的新File-Objective-C类,并从UISplitViewController子类化/继承,我可以做两件事:

  • 进入Main.Storyboard,选择分割视图控制器,并在Identity Inspector中将其“自定义类”设置为“MYCustomUISplitViewController”
    • 现在,当加载分割视图控制器时,我在MYCustomSplitViewController-viewDidLoad方法中得到了一个“命中”
  • 在AppDelegate.m中,我有这个,可以清楚地看到*splitViewController是UISplitViewController的一个实例,而不是MYCustomUISplitViewController

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.
        UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
        UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
        splitViewController.delegate = (id)navigationController.topViewController;
        return YES;
    }
    
    或2。进入Main.Storyboard,选择分割视图控制器,并在Identity Inspector中将其“自定义类”设置为“无”-默认为“UISplitViewController”

    在AppDelegate.m中,我现在直接将*splitViewController修改为MYCustomUISplitViewController

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.
        MYCustomUISplitViewController *splitViewController = (MYCustomUISplitViewController *)self.window.rootViewController;
        UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
        splitViewController.delegate = (id)navigationController.topViewController;
        return YES;
    }
    
    在第二种情况下,我在MYUISplitViewController的-viewDidLoad中没有得到“命中”

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.
        UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
        UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
        splitViewController.delegate = (id)navigationController.topViewController;
        return YES;
    }
    
    我不明白。。。在本例中,MYUISplitViewController是否仅用于创建实例*splitViewController,仅此而已?之后,它不再访问这些方法了?将“Custom class”字段留空是否会将其与我看不到的某个UISplitViewController(苹果默认设置)联系起来


    如果是这样,在第一种情况下设置“自定义类”如何将屏幕上的实例与我的文件中的代码联系起来?当我清楚地创建了MYCustomUISplitViewController的实例时,UISplitViewController如何成为屏幕上实例的“自定义类”?

    您在代码中使用的类型只是对编译器的一个提示,提示您希望变量是什么。在第一个示例中,您声明

    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    

    这意味着这是
    UISplitViewController
    的一个实例。要获取实际的类注销
    NSLog(@“%@”,splitViewController.class)
    。如果您更改了xib中的自定义类,则注销类应为您在xib中设置的自定义类。

    “以获取实际的类注销NSLog(@“%@”,splitViewController.class)。如果您更改了xib中的自定义类,则注销类应为您在xib中设置的自定义类。”我完全理解这一部分。一、 有点,也理解第一部分。请详细说明第一部分,我理解我给一个地址命名为“splitViewController”,该地址实际上是当前对象的窗口rootViewController的地址。如果我理解正确,那么已经有一个对象被指定为rootViewController了?如果是,该对象是在哪里创建的?这是使用Main.storyboard文件创建的吗?(因此,代码所做的就是在代码中通过名称引用现有对象,这样我就可以在代码中使用它。是的,故事板负责创建它。这是在项目设置中设置的,您可以在其中设置要使用的故事板。在这段代码中,正如您所说,您只需获取来自故事板加载的对此实例的引用。太好了。我现在明白了。请将这些详细信息添加到答案中,解释第一部分,使用我上面的部分评论,并且非常具体。我会将其标记为答案。再次感谢。我自己添加了澄清。请接受它们,我将接受答案。尝试尽可能少地修改您的答案。谢谢。