iPhoneアプリのプログラミングに関する質問です

このQ&Aのポイント
  • iPhoneアプリのプログラミングに関する質問です。アプリの開発経験がありますが、プログラムに関してはアマチュアです。
  • 作成したアプリが一回目は正常に動作するが、シミュレーターの再起動後にフリーズや落ちる問題が発生しています。メモリの解放を試みましたが効果はありません。
  • アップルのサンプルコードやチュートリアルを参考にしても問題を解決することができませんでした。質問者は問題の原因が分かっておらず、どのような方向で考えるべきか教えて欲しいとしています。
回答を見る
  • ベストアンサー

iPhoneアプリのプログラミングに関する質問です

iOSでiPhoneアプリの開発をしています。 今までに5本のアプリをアップストアにアップしているのですが、プログラムに関してアマチュアなので、サンプルを参考にしながら、稚拙なプログラム(配列などは使っていません。)を作っています。 6本目として作ったアプリを動かしてみたところ、1回目は普通に動くのですが、シミュレーターの下にある□ボタンで終了させた後に、再度起動させて動かすと、UIImageを呼び出すところで、フリーズしたり落ちたりします。 アップルのサンプルコードやチュートリアルなども見ているのですが、残念ながら私の力では、それらのチュートリアルで今回の問題を解決することは出来ませんでした。 下にあるのが、コードの一部ですが、[hana setImage:hana1]; のところで、Thread 1:Program received signal: "EXC_BAD_ACCESS".というエラーが出ます。メモリへの二重のアクセスが原因なのかもしれないと考えて、メモリを解放するために @property (nonatomic, retain) UIImage * hana0; @property (nonatomic, retain) UIImage * hana1; と @synthesize hana0; @synthesize hana1; と [hana0 release]; [hana1 release]; を追加しましたが、効果はありませんでした。 自分自身で何が問題か分かっていないために説明が間違っている可能性もあるので、この質問だけで解決していただくことは難しいと思いますが、どのような方向で考えるとよいのかだけでも教えていただくと助かります。 よろしくお願いします。 hのファイルです。 @interface MondaiViewController : UIViewController { UIImage * hana0; UIImage * hana1; IBOutlet UIImageView *hana; } @property (nonatomic, retain) UIImage * hana0; @property (nonatomic, retain) UIImage * hana1; -(IBAction) kaisi:(id)sender; -(IBAction) marutuke:(id)sender; @end mファイルです。 @implementation MondaiViewController @synthesize hana0; @synthesize hana1; -(IBAction) marutuke:(id)sender{ if (jidai == 0 && syoukou == 0 && tugi == 0) { int miss = 0; int kai = [[kaitou text] intValue]; if (kai == 345) { [kaitou setTextColor:[UIColor blackColor]]; [hana setImage:hana1]; //Thread 1:Program received signal: "EXC_BAD_ACCESS". } else { [kaitou setTextColor:[UIColor redColor]]; [hana setImage:hana0]; tugi = tugi - 1; miss = 1; } } - (void)dealloc { [hana0 release]; [hana1 release]; [super dealloc]; }

質問者が選んだベストアンサー

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

-(void)viewDidLoad{ [super viewDidLoad]; hana0 = [UIImage imageNamed:@"hanamarunasi.png"]; hana1 = [UIImage imageNamed:@"akamarutoumei.png"]; } この箇所に問題があります。 iPhone SDK(iOS SDK)を勉強するのに、なんらかの書籍を参考になさっていると思いますが、上級者向けでなければ、どの書籍でもかならず、メモリ管理(オブジェクトの管理)に関して1章を割いているはずです。その章を熟読してください。 iPhone、iPod touch、iPadは、256MBないし512MBという、限られたメモリ容量でプログラムを動かしており、きちんとしたメモリ管理が要求されます。おなじObjective-C言語でプログラムを開発するMacintoshでは、GB単位のメモリ容量をいかして、プログラマがメモリ管理をせずにすむような手法(ガベージコレクションといいます)が可能ですが、iOSでは意図的にプログラマがメモリ管理をしなければならないようになっています。つねにオブジェクト(インスタンス)の生成から開放までの、ライフサイクル(オブジェクトの一生)を意識して、プログラムしなければいけません。オブジェクトが開放されたあとで、そのオブジェクトをほかのオブジェクトが参照しようとすると、エラーが発生します。 Objective-Cのすべてのクラスで、初期化メソッドを2種類用意しています。NSStringを例にとると…… [[NSString alloc] init]; [NSString string]; 前者の初期化メソッドでは、retainCount(NSObject Protocolのメソッド)が1になりますが、後者はそうならず、autoreleaseの状態になります。すなわち[NSString string]は、[[[NSString alloc] init] autorelease]とおなじになります。autoreleaseは、当面の役目が終わったら、いつ開放してもかまいませんよ、というメソッドです。 さて、UIImageのimageNamed:メソッドは、インスタンスをautorelease状態で生成します。UIImageインスタンスは、UIImageViewにすぐに取り込んでしまうか、UIViewのdrawRect:メソッドですぐに描画するのが、主な役目なので、さっさと開放したいインスタンスです。今回の場合は、もとインスタンスが存続している間、ずっと保持する必要があるので、ちゃんと保持する処理をしなければいけません。 hana0 = [[UIImage imageNamed:@"hanamarunasi.png"] retain]; このようにretainメソッドを使って、retainCountを1増やすことによって、保持します。

hanamaru51
質問者

お礼

harawo様 ありがとうございます。ご指摘の通り訂正すると、きちんと動作するようになりました。 このような場で、お名前も知らず、きちんとお礼出来ないのが心苦しい限りですが、重ねてお礼申し上げます。 ここまでアプリを作ってきて、地方在住で身近にXcodeを用いてプログラムをしている知り合いがいない環境で、独学での開発はだんだん無謀なことに思えてきていましたが、harawoさんのような親切な方のおかげで前へ進むことが出来ています。 私の作ったアプリが、どれだけ人の役に立つかは分かりませんが、この御親切に応えるためにも、少しでも誰かの役に立つアプリを作っていきたいと思います。 ありがとうございました。

その他の回答 (1)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

まず、ほかのインスタンスから「MondaiViewController」インスタンスの変数、hana0、hana1を参照することがなければ、このふたつをプロパティにする理由がありません。 引用したコードはすべてではありませんね?おそらく(推測ですが)省略して引用しなかった箇所に、「EXC_BAD_ACCESS」を引き起こす原因があるのではないかと考えられます。 よくある間違いが、インターフェイス部で宣言しただけで、生成していない、初期化していない、しているつもりだがそうなっていないということです。hana0、hana1を生成、初期化しているコードを含む箇所を引用してください。 ※本題以外で、気になった点: > シミュレーターの下にある□ボタンで終了させた後に、再度起動させて動かすと、UIImageを呼び出すところで、フリーズしたり落ちたりします。 ホームボタンを押しても、アプリは終了しません。サスペンド状態になっているだけ。なので、「UIImageを呼び出す」こともしていません。

hanamaru51
質問者

補足

前回も助けていただいたharawoさん、ありがとうございます。書籍などのサンプルプログラムを参考にぎりぎりの知識で作成しているので、アドバイスの意味を完全に理解出来ている訳ではありませんが、ホームボタンでアプリが終了しているわけではないことは、分かりました。 普通にこのプログラムを動かしている限りにおいては、正常に動くのですが、なぜ、ホームボタンを押した後に再度動かすとアプリが落ちるのか、さらに不思議になりました。(一度落ちた後に、動かすと普通に動きます。) プログラムのどこがhana0,hana1を生成、初期化している部分か、はっきりと分かっているわけではありませんが、字数制限いっぱいまで重複する部分やコメントは削りながらコピーしました。 この程度の知識で、アプリをつくることが無謀なことかもしれませんが、何とか頑張りたいと思います。よろしくお願いします。 #import <UIKit/UIKit.h> @interface MondaiViewController : UIViewController { UIImage * hana0; UIImage * hana1; IBOutlet UITextField *mondai; IBOutlet UITextField *kaitou; IBOutlet id syoujyunkoujyunkubetu; IBOutlet id jidaikubetu; IBOutlet id taitoru; IBOutlet UIImageView *hana; } @property (nonatomic, retain) UIImage * hana0; @property (nonatomic, retain) UIImage * hana1; -(IBAction) seikaihyouji:(id)sender; -(IBAction) mondaisentaku:(id)sender; -(IBAction) kaisi:(id)sender; -(IBAction) marutuke:(id)sender; -(IBAction) syoujyunkoujyunsentaku:(id)sender; -(IBAction) jidaisentaku:(id)sender; @implementation MondaiViewController @synthesize hana0; @synthesize hana1; int jidai,syoukou,miss; char kuuhaku = ' '; int tugi; -(void)viewDidLoad{ [super viewDidLoad]; hana0 = [UIImage imageNamed:@"hanamarunasi.png"]; hana1 = [UIImage imageNamed:@"akamarutoumei.png"]; } -(IBAction) jidaisentaku:(id)sender{ switch ([jidaikubetu selectedSegmentIndex]) { case 0: jidai = 0; tugi = 0; break; case 1: jidai = 1; tugi = 0; break; case 2: jidai = 2; tugi = 0; break; default: break; } } -(IBAction) syoujyunkoujyunsentaku:(id)sender{ if (jidai == 0) { switch ([syoujyunkoujyunkubetu selectedSegmentIndex]) { case 0: syoukou = 0; tugi = 0; break; case 1: syoukou = 1; tugi = 0; break; case 2: syoukou = 2; tugi = 0; break; default: break; } } -(IBAction) kaisi:(id)sender{ [hana setImage:hana0]; [kaitou setText:[NSString stringWithFormat:@"%c",kuuhaku]]; [kaitou setTextColor:[UIColor blackColor]]; if (jidai == 0 && syoukou == 0 && tugi == 0) { [mondai setText:@"あああああ"]; } この後、同様な形が問題の数だけ続きます。 -(IBAction) marutuke:(id)sender{ if (jidai == 0 && syoukou == 0 && tugi == 0) { int miss = 0; int kai = [[kaitou text] intValue]; if (kai == 111) { [kaitou setTextColor:[UIColor blackColor]]; [hana setImage:hana1]; } else { [kaitou setTextColor:[UIColor redColor]]; [hana setImage:hana0]; tugi = tugi - 1; miss = 1; } } この後、同様に続きます。 -(IBAction) seikaihyouji:(id)sender{ if (jidai == 0 && syoukou == 0 && tugi == 0) { //正解を表示する [kaitou setText :@"111"]; } この後、同様に続きます。 -(IBAction) mondaisentaku:(id)sender{ [hana setImage:hana0]; [mondai setText:@" "]; [kaitou setText:[NSString stringWithFormat:@"%c",kuuhaku]]; [kaitou setTextColor:[UIColor blackColor]]; tugi = 0; [kaitou endEditing:YES]; } - (void)dealloc { [hana release]; [hana0 release]; [hana1 release]; [mondai release]; [kaitou release]; [syoujyunkoujyunkubetu release]; [jidaikubetu release]; [taitoru release]; [super dealloc]; }

関連するQ&A

  • IBAction内でのEXC_BAD_ACCES

    iPhone開発関係で質問です。 IBAction内でNSMutableDictionaryを参照しようとするとEXC_BAD_ACCESSとなってしまい、困っています。メモリ管理が甘いのでしょうか?? プログラムの概要は以下のとおりです。 問題をご存知の方、ご教授下さい。よろしくお願いします。 ---------- FirstViewController.h @interface FirstViewController : UIViewController { NSMutableDictionary *testDic; } @property (nonatomic , retain) NSMutableDictionary *testDic; - (IBAction) TestBtnTapped; @end ---------- FirstViewController.m #import "FirstViewController.h" @implementation FirstViewController @synthesize testDic; /* testDicの受け渡しがうまくいかない TestBtnTappedでEXC_BAD_ACCESS発生 IBActionのせい? */ - (IBAction) TestBtnTapped{ NSlog(@"%@" , testDic); } - (void)viewDidLoad { [super viewDidLoad]; testDic = あるNSMutableDictionaryデータ NSlog(@"%@" , testDic ); //ここでは表示される } - (void)dealloc { [super dealloc]; }

  • iPhone: PageControlについて

    現在、iPhoneのホーム画面風アプリを制作しています。 PageControlとScrollViewを使用して、ページの移動はできるようになりましたが、 以下の問題が発生して困っています。 [問題] ・PageControlで2ページの画面を作っていますが、1ページ目に乗っている「UIButton」は正しく反応するのですが、2ページ目(スライドして表示)の上に乗っている「UIButton」がどうしても反応しません。。。 何か設定が必要なのでしょうか? ***PageControl & ScrollViewのコーディング(一部抜粋)*** (UIButtonの記述等は省略しています) [XXXViewController.h] @interface XXXViewController : UIViewController <UIScrollViewDelegate> { // 画面スクロール用 UIScrollView *scrollView; // PageControl [画面下方の白丸] UIView *pageView; UIPageControl *pageControl; @property (nonatomic, retain) IBOutlet UIScrollView *scrollView; @property (nonatomic, retain) IBOutlet UIView *pageView; @property (nonatomic, retain) IBOutlet UIPageControl *pageControl; [XXXViewController.m] - (void)viewDidLoad { [super viewDidLoad]; scrollView.pagingEnabled = YES; scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * 2, scrollView.frame.size.height); scrollView.showsHorizontalScrollIndicator = NO; scrollView.showsVerticalScrollIndicator = NO; scrollView.delegate = self; pageControl.numberOfPages = 2; pageControl.currentPage = 0; pageView.backgroundColor = UIColor.clearColor; [scrollView addSubview:pageView]; } - (IBAction)changePage:(id)sender { CGRect frame = scrollView.frame; frame.origin.x = frame.size.width * pageControl.currentPage; frame.origin.y = 0; [scrollView scrollRectToVisible:frame animated:YES]; } - (void)scrollViewDidScroll:(UIScrollView *)sender { CGFloat pageWidth = scrollView.frame.size.width; pageControl.currentPage = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1; }

    • ベストアンサー
    • Mac
  • iPhone開発ViewControllerのメモリ開放について

    iPhone開発ViewControllerのメモリ開放について iPhone開発ViewControllerの動きについて質問させて下さい。 XIBで指定したコントロールに対して、hファイルでアウトレットを宣言した変数はviewDidUnloadでリリースすべきか、deallocでリリースべきかを教えて頂けないでしょうか。 ただ、これには前提の条件が必要と思いますので、条件を記述いたします。 以下の条件下でどちらが良いのか教えて頂けないでしょうか。理由も合わせてお願いします。 viewDidUnloadに記述すべきと記述している資料が多いような気がしますが、deallocに記述している資料も多いのです。 deallocはおまじないで記述しているだけなのでしょうか? 前提条件 1、Xcodeバージョン3.2.3 2.XCODEの新規のファイルのテンプレートの選択でUIViewController subclassで   Viewとビューコントローラを作成します。 3.アウトレットの宣言   @interface TestView : UIViewController {    UIButton *btn1;   }   @property(nonatomic, retain) IBOutlet UIButton *btn1;   @end      @implementation TestView   @synthesize btn1;   ・・・・   処理   ・・・・   @end 4.TestViewはモーダル表示で、任意の画面から表示します。   TestView *tv = [[TestView alloc] init];   tv.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;   [self presentModalViewController:tv animated:YES];   [tv release]; 5.TestView画面の終了はTestView上のボタン押下で画面が閉じます。   [self.parentViewController dismissModalViewControllerAnimated:YES]; 6.処理中にはメモリ不足によるdidRecieveMemoriWarningは発生しない前提です。 上記の場合、NSLogでイベントの発生を見ると以下のようになります。 2010-08-16 23:42:44.454 MemoryTest[1606:207] TestView - viewDidLoad 2010-08-16 23:42:44.458 MemoryTest[1606:207] TestView - viewWillAppear 2010-08-16 23:42:46.117 MemoryTest[1606:207] TestView - viewWillDisappear 2010-08-16 23:42:46.839 MemoryTest[1606:207] TestView - dealloc didRecieveMemoriWarningが発生しないので、ViewDidUnLoadも発生しません。 ここまでは理解できますが、ViewDidUnLoadのみに[btn1 Release];を記述した場合、btn1は開放されるのでしょうか。 ビューコントローラのdeallocは発生しているので、OKということでしょうか? dealloc内の[super dealloc];XIBに関連するものは全て開放してくれるのでしょうか?それなら記述しなくて良い? それともViewDidUnLoadとbtn1の両方に記述すべきなのでしょうか? ビューコントローラのdeallocが発生しているということは、btn1も開放されているということですか? ビューコントローラのdeallocが発生しているけど、btn1も開放されないこともあるのでしょうか? すみません。次から次への疑問がわきます。多分、この辺の仕組みを理解していないのだと思いますが、いろいろ調べたのですが、納得する答えが見つかりませんでした。 どうかよろしくお願いします。

  • Xcode4のエラー(IPhoneアプリ)

    はじめまして。 IPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後2行【UIImage *originalImage =[info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【’dismissModalViewControllerAnimated’is deprecated: first deprecated in iOS 6.0】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController:picker animated:YES]; } - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissModalViewControllerAnimated:YES]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; self.imageView.image = originalImage; } @end

  • objective-c 画面遷移について

    プログラミングに関して素人です。 UIViewControllerからPushコードを使って別のUIViewに画面遷移したいのですが 遷移先にTableViewを2つ並べております。 画面遷移する際のコードはどのように記述したらいいのでしょうか? 詳しいかたお力お貸しいただければと思います。 ViewController.m - (IBAction)NewsPage:(UIButton *)sender { //こちらの記述方法が不明 } TViewController.h // XibファイルとUIViewの紐づけ。 @property (weak, nonatomic) IBOutlet UITableView *leftTableView; @property (weak, nonatomic) IBOutlet UITableView *rightTableView; - (IBAction)TopButton:(UIButton *)sender; 根本的になにか違えばご指摘お願いします。

  • iPhone SDK UIViewに追加したUIButtonが反応しな

    iPhone SDK UIViewに追加したUIButtonが反応しない。。。 インターフェイスビルダーにあるUIViewにボタンを追加した場合は、 ちゃんとボタンは反応するんですが、プログラムから追加したUIViewにボタンをおくと UIControlEventTouchUpInsideのイベントに反応しません。 一応、こちらに簡単なプロジェクトもあげておきました。 http://gemic.jp/xcode/buttonOnView.zip 詳細は、下記です。 View-Based Applicationテンプレートで作成したプロジェクト(buttonOnView) buttonOnViewViewController.h #import <UIKit/UIKit.h> @interface buttonOnViewViewController : UIViewController { UIView *theView; } @end ----------------------------------------------------------------- buttonOnViewViewController.m - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor redColor]; UIButton *btn1 = [[UIButton buttonWithType:UIButtonTypeRoundedRect]retain]; [btn1 initWithFrame:CGRectMake(60, 90, 200, 50)]; //このボタンは反応する↓ [self.view addSubview:btn1]; [btn1 setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [btn1 addTarget:self action:@selector(createView:) forControlEvents:UIControlEventTouchUpInside]; } - (IBAction)createView:(UIButton*)sender { theView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; [theView setBackgroundColor:[UIColor greenColor]]; [self.view addSubview:theView]; UIButton *btn = [[UIButton buttonWithType:UIButtonTypeRoundedRect]retain]; [btn initWithFrame:CGRectMake(60, 150, 200, 50)]; //このボタンは反応しない↓ [theView addSubview:btn]; [btn addTarget:self action:@selector(deleteView:) forControlEvents:UIControlEventTouchUpInside]; } - (IBAction)deleteView:(UIButton*)sender { NSLog(@"touch event reaction"); [theView removeFromSuperview]; } ----------------------------------------------------------------- いろいろググってみたり、DevCenterのドキュメントを探したんですが、 思ったような情報が見つからず相当はまってます。 ネットで探して見つからないってことは、凄く初歩的なことか?? と思ってるんですが、、、 どなたか、助けていただけたらありがたいです。

  • Obj-Cで生成元のViewへ文字列を表示させたい

    iOS SDK(Objective-C)を勉強中なのですが、あるView(TestViewController.view)から別のView(ButtonViewController.view)を表示し、表示したViewにあるボタンを押した時に、生成元のView(TestViewController.view)のラベル(test_label)に文字列を表示したいのですが、色々やってみたものの上手く行かず、どの用に実装するのが正しいのか行き詰まってしまいました。どなたか手助けよろしくお願いします。 //*** TestViewController.h #import <UIKit/UIKit.h> #import "ButtonViewController.h" @interface TestViewController : UIViewController { IBOutlet UILabel *test_label; ButtonViewController *buttonViewController; } - (IBAction) pushButton:(id)sender; @end //*** TestViewController.m #import "TestViewController.h" @implementation TestViewController - (void)viewDidLoad { [super viewDidLoad]; test_label.text = @"Push Button"; } //ButtonViewを表示 - (IBAction) pushButton:(id)sender { buttonViewController = [[ButtonViewController alloc] initWithNibName:@"ButtonView" bundle:nil]; [self.view addSubview:buttonViewController.view]; } - (void)dealloc { [buttonViewController release]; [super dealloc]; } @end //*** ButtonViewController.h #import <UIKit/UIKit.h> @interface ButtonViewController : UIViewController { } - (IBAction) pushButtonSub:(id)sender; @end //*** ButtonViewController.m #import "ButtonViewController.h" @implementation ButtonViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction) pushButtonSub:(id)sender { // ??? ← このボタンを押したときにtest_labelへ表示させたい } - (void)dealloc { [super dealloc]; } @end

  • iPhoneアプリ作成時のXcodeのエラー

    はじめまして。 iPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後から4行目【UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【No visible @interface for 'NSDictionary' declares the selector 'objectForkey'】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [[self presentViewController:picker animated:YES completion:nil];} - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissViewControllerAnimated:YES completion:nil]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; // ↑↑ 上記の行でエラーが出ます self.imageView.image = originalImage; } @end

  • Obj-CでViewコントローラのラベルに表示する

    Objective-Cであるクラスから、特定のViewControllerのもつLabel要素へテキストを表示したく、色々試してみたのですが、うまく動作しませんでした。 詳しい方、ぜひアドバイスお願いします。 □やりたいこと クラス側から、ViewControllerの持つ要素を操作したい □テストで使用したコード test_buttonをクリックすると、lbl_mesへ文字列を表示する ----------------- ■classTest.h #import "helloViewController.h" ----------------- ■classTest.m #import "classTest.h" - (void) makeStr { helloViewController *hv = [[helloViewController alloc] init]; hv->lbl_mes.text = @"HELLO WORLD"; [hv release]; } ----------------- ■helloViewController.h #import "classTest.h" @interface helloViewController : UIViewController { @public IBOutlet UILabel* lbl_mes; } @property(nonatomic,retain) IBOutlet UILabel* lbl_mes; -(IBAction) test_button; ----------------- ■helloViewController.m #import "helloViewController.h" -(IBAction) test_button{ classTest *clst = [[classTest alloc] init]; [clst makeStr]; [clst release]; } よろしくお願いします。

  • Objective-C,viewが動作しない

    IBを使わないカメラアプリを作っています。 AppDelegate.m内のapplication didFinishLaunchingメソッド内で生成したwindowとviewはコンパイルして表示確認できたのですが、viewControllerで書いたUIImagePickerViewControllerのviewが出てきません。 そもそもviewController.mのloadViewメソッドやviewDidLoadメソッドが動いていません。(メソッド内にNSLogを書いてコンパイルしてもログに出ない) viewController.h #import <UIKit/UIKit.h> @interface CameraViewController : UIViewController <UINavigationControllerDelegate,UIImagePickerControllerDelegate> { @private UIImagePickerController* _imagePicker; } @property(nonatomic,retain) UIImagePickerController *imagePicker; @end viewController.m #import "CameraViewController.h" @implementation CameraViewController @synthesize imagePicker=_imagePicker; - (void)dealloc { [super dealloc]; } #pragma mark - View lifecycle - (void)loadView { [super loadView]; //UIImagePickerControllerの作成 if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ return; } UIImagePickerController* imagePicker; imagePicker = [[UIImagePickerController alloc] init]; [imagePicker autorelease]; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.allowsEditing=NO; imagePicker.delegate = self; //imagePickerのviewを最上部に [self presentModalViewController:imagePicker animated:YES]; //シャッターを切る [self.imagePicker takePicture]; } @end viewControllerが機能しない原因としてそういった可能性が考えられるのでしょうか? あれこれ調べてみましたが煮詰まっています。よろしくお願いします