Ios 为什么可以';初始化ViewController时设置这些UITextFields的委托吗?

Ios 为什么可以';初始化ViewController时设置这些UITextFields的委托吗?,ios,objective-c,Ios,Objective C,在这种情况下,代理未成功设置。但是,如果我进入xib文件并按住ctrl键单击并将UITextFields拖到文件所有者上,并通过该操作将其设置为代理,则它可以工作。有人能解释一下为什么在init方法中调用setter方法不起作用吗?在init方法中,视图尚未加载。所有可视化设置必须在viewController的生命周期中进一步完成,至少在viewDidLoad方法中完成。或者,如果您不选择.xib解决方案,则可以在手动将视图加载到loadView方法中时执行此操作 因此,init方法中的两个标

在这种情况下,代理未成功设置。但是,如果我进入xib文件并按住ctrl键单击并将UITextFields拖到文件所有者上,并通过该操作将其设置为代理,则它可以工作。有人能解释一下为什么在init方法中调用setter方法不起作用吗?

在init方法中,视图尚未加载。所有可视化设置必须在viewController的生命周期中进一步完成,至少在viewDidLoad方法中完成。或者,如果您不选择.xib解决方案,则可以在手动将视图加载到loadView方法中时执行此操作


因此,init方法中的两个标签都是nil,无法设置委托。

如果文本字段是IBOutlet,则在调用viewDidLoad方法之前,文本字段将是nil(因此将委托设置为nil对象)。当调用viewDidLoad时,它的字面意思是视图已加载,所有IBoutlet和IBAction都已连接,可供您使用。
-(id) initForNewItem{
    self = [super initWithNibName:@"EmployeeDetailViewController" bundle:nil];
    if(self){
        [nameField setDelegate:self];
        [pinField setDelegate:self];
    }
    return self;
}