簡體   English   中英

子類化UIViewController,重復調用viewDidLoad

[英]Subclassing UIViewController, viewDidLoad called repeatedly

我將UIViewController子類化為STViewController並注意到從STViewController繼承的類會重復調用它們的viewDidLoad方法。 最終崩潰的應用程序。 STViewController基本上是一個空白實現。 我是子類,如下所示:

#import "STViewController.h"

@interface WelcomeViewController : STViewController {

STViewController.h

#import <UIKit/UIKit.h>

@interface STViewController : UIViewController
{
}
@end

STViewController.m

#import "STViewController.h"


@implementation STViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)loadView
{
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end

來自WelcomeViewController.m的viewDidLoad()

- (void)viewDidLoad
{
    [super viewDidLoad];

    // hide the buttons
    [[self signUp] setHidden: YES];
    [[self logIn] setHidden: YES];
}

您正在覆蓋loadView ,但您的實現是空的,並且您沒有分配視圖。 刪除loadView覆蓋。

UIViewController類參考 (強調我的):

你永遠不應該直接調用這個方法。 視圖控制器在請求視圖屬性時調用此方法,但當前為nil。 如果手動創建視圖,則必須覆蓋此方法並使用它來創建視圖。 如果使用Interface Builder創建視圖並初始化視圖控制器 - 也就是說,使用initWithNibName:bundle:方法初始化視圖,直接設置nibName和nibBundle屬性,或者在Interface Builder中創建視圖和視圖控制器 - 那么你不能覆蓋這個方法。

此方法的默認實現查找有效的nib信息,並使用該信息加載關聯的nib文件。 如果未指定nib信息, 則默認實現會創建純UIView對象並使其成為主視圖

如果為了手動創建視圖而重寫此方法,則應該這樣做並將層次結構的根視圖分配給view屬性 (您創建的視圖應該是唯一的實例,不應與任何其他視圖控制器對象共享。)此方法的自定義實現不應調用super。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM