0

我试图UIImageView从一个segue设置一个,由于某种原因,图像没有被设置。这.h是我的类的子类文件UIViewController

@interface PhotoDisplayViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIImageView *photoView;
-(void)setPhoto:(UIImage *)photo;
@end

这是setPhoto

-(void)setPhoto:(UIImage *)photo{
    NSLog(@"PHOTO %@", photo);
    _photoView.image = photo;
    NSLog(@"MYPHOTO %@", _photoView.image);
}

当我从准备 segue 调用 setPhoto 时,我在控制台中看到了这个

2012-12-16 13:26:22.129 TestApp[2183:907] PHOTO <UIImage: 0x1fd7cd80>
2012-12-16 13:26:22.130 TestApp[2183:907] MYPHOTO (null)

为什么会这样?

4

3 回答 3

3

看起来_photoView大概是nil。加载笔尖时可能未设置。确保您已在 IB 中正确连接它。或者您可能正在调用 -setPhoto: 在视图加载之前。

于 2012-12-16T21:48:22.230 回答
0

我建议您更改weakstrong并查看此链接。

Objective-C - 弱属性 - getter autoreleases(自动引用计数)

于 2012-12-16T23:41:24.463 回答
0

我认为您将setPhoto:方法称为如下。在这种情况下,首先调用 setPhoto:,然后在 PhotoDisplayViewController 中调用 viewDidLoad 方法。这就是 photoView 为零的原因。实际上应该在 PhotoDisplayViewController 中调用 viewDidLoad 方法。所以你应该稍微改变一下代码。

-(void)someActionMethod{
          [self performSegueWithIdentifier:yourIdentifier sender:nil];
 }
 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
            if ([[segue identifier] isEqualToString:yourIdentifier]) {
                photoDisplayVC = [segue destinationViewController];//photoDisplayVC is a object of         PhotoDisplayViewController
                 [photoDisplayVC setPhoto:imageObject];
 }

更改代码:在这种情况下,首先调用 viewDidLoad 方法,然后在 PhotoDisplayViewController 中调用 setPhoto: 方法。然后你会得到图像。

-(void)someActionMethod{
  [self performSegueWithIdentifier:yourIdentifier sender:nil];
 [photoDisplayVC setPhoto:imageObject];
   }
  -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
                if ([[segue identifier] isEqualToString:yourIdentifier]) {
                    photoDisplayVC = [segue destinationViewController];//photoDisplayVC is a object of         PhotoDisplayViewController

     }

我想这会对你有所帮助。

于 2013-05-24T13:20:09.900 回答