下記のようにViewControllerが2つあるとします。
ViewController.h
ViewController.m
ViewController2.h
ViewController2.m
[やりたい事]
ViewControllerでUIImageを設定し、UIImageViewで表示。
その画像をViewController2でも使いたいです。
方法は、下記のようにクラスメソッドを定義して、もうひとつの
ViewController2に値を送りたいと思います。
ViewController1.h
objective
1#import <UIKit/UIKit.h> 2 3@interface ViewController : UIViewController 4 5@property (class, nonnull) UIImage *setIMG; 6+ (UIImage*)setIMG:(UIImage*)img; 7@end
ViewController2.m
objective
1#import "ViewController.h" 2#import "ViewController2.h" 3 4@interface ViewController () 5 6@end 7 8static UIImage *_setIMG = nil; 9 10@implementation ViewController 11 12- (void)viewDidLoad { 13 [super viewDidLoad]; 14 15 UIImage *img = [UIImage imageNamed:@"image1.png"]; 16 UIImageView *imageView =[[UIImageView alloc] initWithFrame:CGRectMake(0,0,200,200)]; 17 imageView.image= img; 18 19 [self.view addSubview:imageView]; 20 21} 22 23- (void)didReceiveMemoryWarning { 24 [super didReceiveMemoryWarning]; 25 // Dispose of any resources that can be recreated. 26} 27 28+ (UIImage *)setIMG:(UIImage*)img{ 29 30 if (!_setIMG) { 31 32 _setIMG = img; 33 34 } 35 36 return _setIMG; 37 38} 39 40@end
ViewController2.h
objective
1#import <UIKit/UIKit.h> 2 3@interface ViewController2 : UIViewController 4 5@end
ViewController2.m
objective
1#import "ViewController.h" 2#import "ViewController2.h" 3 4@interface ViewController2 () 5 6@end 7 8@implementation ViewController2 9 10- (void)viewDidLoad { 11 [super viewDidLoad]; 12 13 UIImageView *imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,200,200)]; 14 imageView2.image = ViewController.setIMG; 15 [self.view addSubview:imageView2]; 16 17} 18 19- (void)didReceiveMemoryWarning { 20 [super didReceiveMemoryWarning]; 21 // Dispose of any resources that can be recreated. 22} 23 24@end
[問題点]
・エラーが発生しアプリがクラッシュする。
unrecognized selector sent to class 0x10a6f8f40
ただしクラスメソッドの第2引数を無くし、下記のように記述するとビルドできる。
これだと画像ファイルを再度指定し直しているため、本来やりたい事ができません。
+ (UIImage *)setIMG{ if (!_setIMG) { _setIMG = [UIImage imageNamed:@"image1.png"]; } return _setIMG; }
わかる方、ぜひ教えてください。
また、ご不備等ありましたら、お手数ですがご指摘ください。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。