• 締切済み

iPhoneアプリ プログラミングについて

iPhoneアプリを勉強中の初心者です。 赤松正行著の本を参考にカウントアップ・カウントダウンの アプリ作成に挑戦しているのですが、 ホームボタンを2度押しして終了したアプリを再起動時に 設定値や数値などを保持しておく方法の記載が無く いろいろと調べたりしたのですがどうしても 完結できない状態で困り果てています。 何卒ご教授頂けますでしょうか。 赤松正行著/iPhone SDKの教科書によるソースコード CounterViewController.h #import <UIKit/UIKit.h> @interface CounterViewController : UIViewController { IBOutlet UILabel *display; // カウンターの値の表示ラベル int count; // カウンターの値 } - (IBAction)add; // カウンターの値を増やす - (IBAction)subtract; // カウンターの値を減らす - (IBAction)clear; // カウンターの値をゼロにする @end CounterViewController.m #import "CounterViewController.h" @implementation CounterViewController // カウンターの値を表示用ラベルに表示 - (void)updateDisplay { display.text = [NSString stringWithFormat:@"%04d", count]; } // カウンターの値を増やす - (IBAction)add { count = count + 1; [self updateDisplay]; } // カウンターの値を減らす - (IBAction)subtract { count = count - 1; if (count < 0) count = 0; [self updateDisplay]; } // カウンターの値をゼロにする - (IBAction)clear { count = 0; [self updateDisplay]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (void)dealloc { [super dealloc]; } @end 赤松正行著/iPhone SDKの教科書にはここまでは載っているのですが、 このままだとマルチタスクによって通常の終了時には 一時的にはデータは保持されていますが ホームボタンを2度押しして下部のアイコンにて終了させると データが消えてしまいます。 長々となりましたが皆様のお知恵をお借りできますでしょうか。 宜しくおねがいします。

みんなの回答

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

> なにぶん、超初心者のため実装方法が分からず > 困り果てている状態です。 あなた、私が紹介したリンク先を読みましたか?読んでいたらそんなことは言えないはずです。ちゃんと一から説明されていますよ。 まさか英語がわからないということはありませんよね?中学校で習う英語レベルでじゅうぶん読み解けますから、そうなるとあなたは小学生ということになります。あなたが小学生なら、ご両親や保護者の方に、代わって文書を読んでもらいましょう。 http://akamatsu.org/aka/?page_id=2269 「iPhone SDKの教科書」の紹介サイトに、目次が載っていますが、NSUserDefaultsに関して、第3部Chapter3-15に説明があるようですよ。私はこの書籍を読んだことがないし、もちろん持っていないので、これ以上のことは言えませんが。

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

アプリの「状態」の保存には、NSUserDefaultsクラスを使います。 NSUserDefaults Class Reference http://developer.apple.com/library/IOS/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html User Defaults Programming Topics http://developer.apple.com/library/IOS/documentation/Cocoa/Conceptual/UserDefaults/UserDefaults.html#//apple_ref/doc/uid/10000059i ひとことで説明すると、初期設定ファイルに数値や文字列などを書き込んだり、読み出すためのクラスです。 View Controllerの「viewDidUnload」で、カウンターの値を保存し、「viewDidLoad」で読み出すといいでしょう。

mamadesu8
質問者

補足

harawoさんお忙しい中ご回答いただきありがとうございます。 助言頂きましたNSUserDefaultsを使用しての方法は 参考書やネットなどで調べて、 なんとかたどり着いているのですが・・・ なにぶん、超初心者のため実装方法が分からず 困り果てている状態です。 質問させて頂いている上記の内容だとすると どのように実際に実装するのか詳しく教えて頂ければ幸いです。 宜しくお願い致します。

関連するQ&A

  • iPhoneアプリプログラミング

    iPhoneアプリ開発超初心者です。 「逆引きObjective-C for iPhoneアプリ」というサイトの中の http://www.objectivec-iphone.com/UIKit/UIImageView/UIImageView.html に、画像を表示するサンプルプログラムとして - (void)viewDidLoad { [super viewDidLoad]; // UIImageViewの初期化 CGRect rect = CGRectMake(10, 10, 250, 250); UIImageView *imageView = [[UIImageView alloc]initWithFrame:rect]; // 画像の読み込み imageView.image = [UIImage imageNamed:@"lena.png"]; // UIImageViewのインスタンスをビューに追加 [self.view addSubview:imageView]; } が紹介されているのですが、 メソッド - (IBAction)executeView:(id) sender {   // 画像表示 } の中で、画面上の特定位置への画像表示を指定する方法を教えてください。 上記のサンプルプログラムとメソッドを組み合わせるようなことをするのでしょうか? なにぶん超初心者で的外れなことを言っているかもしれませんが、よろしくお願いします。

  • 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

  • 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

  • iphone アプリのソースについて

    iphoneのアプリを作成しています。 上手く作動しないので教えてください。 下のようにボタンを押すとターゲットが移動するプログラムを書いています。 -(void)viewDidLoad { target.center = CGPointMake(200, 300); } -(IBAction)pushbtn { target.center = CGPointMake(300, 100); } でなんですが、今のプログラムだと移動時にスーっと動いていく感じになってしまいます。 個人的にはスーっと動くのではなくパッと移動(ワープ)する感じにしたいのですが、どのようにすればよいでしょうか? hiddenとか入れてみましたが駄目でした。 あとiphoneではないですが、androidの画面デザインが簡単に出来るソフトなどを知っていましたら教えてください。

  • 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

  • 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]; }

  • Objective-Cのメモリ管理

    はじめまして。 iphoneアプリを作っていてメモリ管理について不明な点があるので教えて下さい。 memoryViewController.h ============================================== #import <UIKit/UIKit.h> @interface memoryViewController : UIViewController { id obj; } @property(retain)id obj; @end =============================================== memoryViewController.mm(一部) =============================================== @implementation memoryViewController @synthesize obj; - (void)viewDidLoad { [super viewDidLoad]; self.obj = [[NSObject alloc] init]; NSLog(@"count = %d", [obj retainCount]); } =============================================== 下記の部分についてです。 self.obj = [[NSObject alloc] init]; 「self.」を付けた場合retainCountは2で、付けなかった場合retaionCountは1になります。 何故違ってくるのかが理解できません。 教えて下さい。

  • iPhoneアプリのビルトインSafari上のフォームの値をアプリが取得できるか?

    開発者ではないのでiPhone SDKでどこまでできるのかわかりかねるのですが、 アプリ内の内蔵ブラウザ上での入力した値をアプリ側で取得される、ということはないのでしょうか?できちゃうと、やはり認証情報は入力するのに抵抗があります。 ご存じの方いらっしゃらないでしょうか?

  • 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のドキュメントを探したんですが、 思ったような情報が見つからず相当はまってます。 ネットで探して見つからないってことは、凄く初歩的なことか?? と思ってるんですが、、、 どなたか、助けていただけたらありがたいです。

  • 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]; }

専門家に質問してみよう