2013-04-08 65 views
0

在我的第一个视图控制器中,我有一个在实现文件中合成的UIImage属性。在推送的第二个视图控制器中,我在那里创建一个UIImage对象,同时将它设置为来自第一个视图控制器的UIImage属性。最后,我解雇了第二个视图控制器。但是,视图控制器被解散后,图像似乎并未保存。我的理解是,因为UIImage是一个指针,数据传递是通过引用,并且由于控制器被解雇,UIImage也是如此。这是否正确,是否有更好的方法来完成这项任务?为了您的参考,我正在使用ARC。在ViewControllers之间传递UIImage

在第一视图控制器(firstVC)

@property (strong, nonatomic) UIImage *image; 

在第二视图控制器,

[firstVC setImage:self.ivarUIImageView.image]; 

其中ivarUIImageVIew定义为:

@property (strong, nonatomic) IBOutlet UIImageView *ivarUIImageView; 

现在让我们在第三说视图控制器,我在viewDidLoad方法中:

imgView = [[UIImageView alloc] initWithImage:firstVC.image]; 

,其中作为imgView定义:

@property (strong, nonatomic) IBOutlet UIImageView *imgView; 
+0

在你的第三个VC中,你如何定义firstVC?如果你记录第一个VC(在第三个VC的viewDidLoad中),它是否为零? – rdelmar 2013-04-08 23:14:45

+0

如果你只是想处理相同的图像,为什么不把它放在单例类(例如AppDelegate)? – Mehdi 2013-04-08 23:24:10

+0

你在这里做什么真的不清楚。在第二个视图控制器中,您在firstVC上调用setImage - 什么是firstVC?指向第一个视图控制器的指针?图像视图?在第三个视图控制器中,你说你有一个IBOutlet imgView,但是然后你分配init - 如果它是IB中图像视图的出口,你不想这样做。 – rdelmar 2013-04-08 23:36:51

回答

1

你要确保该UIImage由第一视图控制器保留,通过使财产strong。此外,如果正在将其显示在UIImageView中,则必须将UIImageView的image设置为新图像才能看到UI中反映的更改。

+0

第一个视图控制器中的UIImage具有强大的和非原子的财产集。在第二个视图控制器中创建一个图像,并使用适当的setter方法来设置UIImage。当试图在UIImageView中显示图像时,我首先使用UIImage属性分配和initWithImage。但是没有显示。我哪里做错了? – David 2013-04-08 22:41:38

+0

你可以显示该代码吗?你想确保UIImageView被添加到视图中,并且你要执行setImage:在第二个视图重新设置第一个图像之后。这可以通过覆盖视图控制器的setImage:accessor方法来完成。 – 2013-04-08 22:44:29

+0

当然,我在上面添加了我在编辑中的内容。有任何想法吗? – David 2013-04-08 22:59:08

相关问题