当属性设置得太早时,UIImageView不显示图像

Und*_*ion 2 iphone objective-c

我想要在里面显示一个图像UIView.在Interface Builder中,它UIView是根,a UIImageView是它的子.

视图连接到视图控制器的视图插座,图像视图连接到图像视图插座:

@property (nonatomic, retain) IBOutlet UIImageView *imageView;
Run Code Online (Sandbox Code Playgroud)

如果我尝试UIImageView在可见之前设置图像属性,则图像不会显示.

TestView *testView = [[TestView alloc] initWithNibName:@"TestView" bundle:nil];
testview.imageView.image = [logos objectAtIndex:indexPath.row];
[self.navigationController pushViewController:testView animated:YES];
Run Code Online (Sandbox Code Playgroud)

但是,如果我将图像传递给控制器​​并将图像属性设置为viewDidLoad,则图像变为可见.

TestView *testView = [[TestView alloc] initWithNibName:@"TestView" bundle:nil];
testview.image = [logos objectAtIndex:indexPath.row];
[self.navigationController pushViewController:testView animated:YES];

- (void)viewDidLoad
{
    [super viewDidLoad];
    imageView.image = image;
}
Run Code Online (Sandbox Code Playgroud)

是什么导致图像在第一个场景中不显示?

ccj*_*sen 8

iOS的文档要UIViewControllerinitWithNibName:束:方法规定:

...您指定的nib文件不会立即加载.它是在第一次访问视图控制器的视图时加载的.如果要在加载nib文件后执行其他初始化,请覆盖该viewDidLoad方法并在那里执行任务....

nib/xib文件未立即加载的结果(即它使用所谓的延迟加载)意味着IBOutlet当您尝试在第一个示例中设置时,TestView控制器中的imageView 属性仍为nil.

在第二个示例中,您将在加载nib/xib文件viewDidLoad调用它,因此它可以按预期工作.