gpt4 book ai didi

objective-c - 调用 initWithCoder 后 IBOutlet 为 nil

转载 作者:行者123 更新时间:2023-12-01 14:00:56 25 4
gpt4 key购买 nike

简单的问题,我使用 Storyboard在 UIViewController 中定义了一个名为 bigImageView 的 UIImageView,它在 UIViewController 的 h 文件中声明如下:

 @property (retain, nonatomic) IBOutlet UIImageView *bigImageView;

在我的 appDelegate 上,我按如下方式初始化 UIViewController:

imageViewController = [storyboard instantiateViewControllerWithIdentifier:@"chosenImageController"];

这会在我的 UIViewController m 文件上调用 initWithCoder:

-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
// Custom initialization
}
return self;
}

这个函数只被调用一次,所以没有双重初始化。然而,稍后,当我检查我的 bigImageView 指针时,它仍然是零。

init 不是应该给它分配内存吗?我认为这就是为什么当我尝试将此 UIImageview 设置为保存 UIImage 它不显示图像的原因谢谢

最佳答案

一切都按照预期的方式运作。首先,nib/storyboard 中的每个对象都会调用 alloc/init,然后建立所有连接,然后调用 viewDidLoad

您需要等待 - (void)viewDidLoad 在您的 Controller 上被调用,然后应该设置 bigImageView。如果未设置,则说明您在 Storyboard 中做错了。

init 方法不负责分配任何内存。所有内存都由 alloc 方法分配,该方法总是在 init 之前调用。 Alloc 将用 nil/NULL/0 值填充所有实例变量,然后 init 有机会为每个实例变量分配初始值(通常基于 NSCoder 对象的内容,但这取决于你来决定应该做什么)。

然而,对于 IB 网点,这些是在初始化之后由 nib 加载过程设置的。

编辑:

// ViewControllerA.m:
imageViewController = [storyboard instantiateViewControllerWithIdentifier:@"chosenImageController"];
imageViewController.image = imageToShow;

// ViewControllerB.h
@property (retain) NSImage *image;
@property (retain, nonatomic) IBOutlet UIImageView *bigImageView;

// ViewControllerB.m
- (void)viewDidLoad
{
self.bigImageView.image = self.image;

[super viewDidLoad];
}

关于objective-c - 调用 initWithCoder 后 IBOutlet 为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22740910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com