0

UIImageViewセグエからを設定しようとしてい.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);
}

セグエの準備から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

weakに変更してstrong、このリンクを確認することをお勧めします。

Objective-C-弱いプロパティ-ゲッターの自動リリース(自動参照カウント)

于 2012-12-16T23:41:24.463 に答える
0

次のようにメソッドを呼び出したと思いますsetPhoto:。この場合、最初に setPhoto: が呼び出され、その後 PhotoDisplayViewController で viewDidLoad メソッドが呼び出されます。そのため、photoView は nil です。実際には 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 メソッドが呼び出され、その後 setPhoto: メソッドが PhotoDisplayViewController で呼び出されます。すると、イメージが得られます。

-(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 に答える