質問編集履歴

1 誤字を訂正

otokichi_

otokichi_ score 19

2018/12/05 01:33  投稿

Objective-Cで異なるViewControllerに画像を送る方法
下記のようにViewControllerが2つあるとします。
ViewController.h
ViewController.m
ViewController2.h
ViewController2.m
[やりたい事]
ViewControllerでUIImageを設定し、UIImageViewで表示。
その画像をViewController2でも使いたいです。
方法は、下記のようにクラスメソッドを定義して、もうひとつの
ViewController2に値を送りたいと思います。
ViewController1.h
```objective-c
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (class, nonnull) UIImage *setIMG;
+ (UIImage*)setIMG:(UIImage*)img;
@end
```
ViewController2.m
```objective-c
#import "ViewController.h"
#import "ViewController2.h"
@interface ViewController ()
@end
static UIImage *_setIMG = nil;
@implementation ViewController
- (void)viewDidLoad {
   [super viewDidLoad];
       UIImage *img = [UIImage imageNamed:@"dokuro.png"];
       UIImage *img = [UIImage imageNamed:@"image1.png"];
       UIImageView *imageView =[[UIImageView alloc] initWithFrame:CGRectMake(0,0,200,200)];
       imageView.image= img;
       
       [self.view addSubview:imageView];
   
}
- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}
+ (UIImage *)setIMG:(UIImage*)img{
   
   if (!_setIMG) {
     
       _setIMG = img;
       
   }
   
   return _setIMG;
   
}
@end
```
 
ViewController2.h
```objective-c
#import <UIKit/UIKit.h>
@interface ViewController2 : UIViewController
@end
```
ViewController2.m
```objective-c
#import "ViewController.h"
#import "ViewController2.h"
@interface ViewController2 ()
@end
@implementation ViewController2
- (void)viewDidLoad {
   [super viewDidLoad];
   
   UIImageView *imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,200,200)];
   imageView2.image = ViewController.setIMG;
   [self.view addSubview:imageView2];
}
- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
   // Dispose of any resources that can be recreated.
}
@end
```
[問題点]
・エラーが発生しアプリがクラッシュする。
unrecognized selector sent to class 0x10a6f8f40
ただしクラスメソッドの第2引数を無くし、下記のように記述するとビルドできる。
これだと画像ファイルを再度指定し直しているため、本来やりたい事ができません。
```
+ (UIImage *)setIMG{
   
    if (!_setIMG) {
     
       _setIMG = [UIImage imageNamed:@"image1.png"];
       
   }
   
   return _setIMG;
   
}
```
わかる方、ぜひ教えてください。
また、ご不備等ありましたら、お手数ですがご指摘ください。
よろしくお願いいたします。
  • Objective-C

    1359 questions

    Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

  • iOS

    6248 questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

  • Xcode

    7046 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iPhone

    1498 questions

    iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る