Objective c 从类外调用时,Obj-c UIImageView为null

Objective c 从类外调用时,Obj-c UIImageView为null,objective-c,ios,uiimageview,Objective C,Ios,Uiimageview,我有一个UIViewController,其中包含一个已正确连接的UIImageView(我可以在控制器内设置图像) 我还使用 UIImageView *_imgQRCode; 以及使用 @property (strong, nonatomic) IBOutlet UIImageView *imgQRCode; 合成使用: @synthesize imgQRCode = _imgQRCode; 但是当我调用下面这样的东西时,图像什么也不会发生,当我在Xcode中检查时,引用是内存引用是0x

我有一个
UIViewController
,其中包含一个已正确连接的
UIImageView
(我可以在控制器内设置图像)

我还使用

UIImageView *_imgQRCode;
以及使用

@property (strong, nonatomic) IBOutlet UIImageView *imgQRCode;
合成使用:

@synthesize imgQRCode = _imgQRCode;
但是当我调用下面这样的东西时,图像什么也不会发生,当我在Xcode中检查时,引用是内存引用是
0x00000000
。注意:当在ViewController内部调用时,该代码起作用。从任何其他视图控制器调用以下内容,控制器实例化如下:

QRPopupViewController *qrPop = [[QRPopupViewController alloc] initWithNibName:@"QRPopupViewController" bundle:nil];

[controller.imgView setImage:[UIImage imageNamed:@"sample.png"]];

有没有办法解决这个问题以及我为什么会变空?

首先:插座应该很弱

@property (weak, nonatomic) IBOutlet UIImageView *imgQRCode;

您必须将imgQRCode outlet挂接到您的viewController,并且您可以在viewDidLoad中使用它。

对于不属于当前可见的view controller的所有UI控件实例,您将获得null。因此,所有对该UI控件的调用都不会执行与UI相关的操作

如果要更新不属于当前可见视图控制器的任何UI控件,可以使用app delegate。它是集中在所有视图控制器之间的唯一位置

有一种称为“protocol delegate”的机制,用于调用某种方法从当前可见的视图控制器更新UI部分。你可以详细了解这件事


如果您选择的是“协议委托”方法,那么请详细探讨方法执行流程。当您从当前可见视图控制器的方法调用协议时,将在调用方方法完成后调用相应的协议实现方法。因此,您需要注意同步。

从调用的位置调用
[controller.imgView setImage:[UIImage imagename:@“sample.png”]明确指定并添加更多代码更新问题。我从任何其他视图控制器调用它。我刚刚发现我需要在设置图像之前显示视图。这是最相关的答案。谢谢