質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Objective-C

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

iOS

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

Xcode

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

iPhone

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

Q&A

1回答

226閲覧

Objective-Cで異なるViewControllerに画像を送る方法

otokichi_

総合スコア25

Objective-C

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

iOS

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

Xcode

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

iPhone

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

0グッド

1クリップ

投稿2018/12/04 16:32

編集2018/12/04 16:33

下記のように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; }

わかる方、ぜひ教えてください。
また、ご不備等ありましたら、お手数ですがご指摘ください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ViewControllerからViewController2に遷移するときに画像を渡したいのであれば、_setIMGをViewControllerのプロパティに変更し、ViewControllerにprepareForSegue:sender:を実装して、その中で画像を渡して下さい。
ref. prepareForSegue:sender:

エラーの原因

プロパティsetIMGのセッターはsetSetIMGになります。
また、セッターは戻り値を持ちません。(voidにしないといけない)

投稿2018/12/06 02:18

編集2018/12/06 04:10
fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問