iPhoneアプリプログラミングでボタンを押した時に月を移動する方法

このQ&Aのポイント
  • iPhoneアプリのプログラミングでボタンを押した時に月を移動する方法について困っています。年月日曜日を取得する際にエラーが出てしまい、viewDidLoad内の変数の値を変える方法を知りたいです。
  • ボタンを押した時に月を移動するプログラムを作っていますが、エラーが出てうまくいきません。年月日曜日を取得する際にエラーが出てしまうため、viewDidLoad内の変数の値を変える方法について教えてください。
  • iPhoneアプリのボタンを押した時に月を移動するプログラムを作っていますが、エラーが出てしまいます。年月日曜日を取得する際にエラーが発生してしまい、viewDidLoad内の変数の値を変える方法がわかりません。どうすれば正しく実装できるでしょうか?
回答を見る
  • ベストアンサー

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

現在iPhoneアプリのプログラミングを勉強を兼ねてカレンダーを作っています。 ボタンを押した時、月を移動するプログラムを組むところで処理がうまくいかず困っています。 まず、年月日曜日を取得するとき、int型でyear,monthを宣言し,現在の日付データを入れています。 その値をボタンを押した時に増減させたいのですが、以下の//エラーが出る箇所と記載した場所でviewcontroller not found とエラーが出てしまいます。 ボタンの中のコードから、viewDidLoad内の変数の値を変えるにはどうしたらいいのでしょうか? 「//年・月・日・曜日の取得」と「//月を移動するButton」のコードはviewDidLoad内にコードを書いています。 //年・月・日・曜日の取得 NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger flags; NSDateComponents *comps; flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; comps = [calendar components:flags fromDate:now]; NSInteger year = comps.year; NSInteger month = comps.month; NSInteger day = comps.day; comps = [calendar components:NSWeekdayCalendarUnit fromDate:now]; NSInteger weekday = comps.weekday;//1日が日曜、7日が土曜 NSInteger firstDayWeek = [self getFirstWeek:year month:month];//月の初日の曜日 //月を移動するButton UIButton *preButton = [UIButton buttonWithType:UIButtonTypeCustom]; [preButton setTitle:@"前月" forState:UIControlStateNormal]; preButton.titleLabel.font = [UIFont boldSystemFontOfSize:10]; preButton.tintColor = [UIColor whiteColor]; preButton.backgroundColor = [UIColor blueColor]; preButton.frame = CGRectMake(10, 30, 30, 20); [preButton addTarget:self action:@selector(preview:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:preButton]; //前月を表示するボタンメソッドの内容 - (void) preview:(id *)sender{ if (_year==1) { //エラーが出る箇所 self.month = 12  //エラーが出る箇所 _month--; //エラーが出る箇所 }else self.month--; //エラーが出る箇所 }

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

  • ベストアンサー
回答No.2

> Use of undercleared identifier '_year' > Property 'month' not found on object of type 'ViewController *' これって、単純にyearやmonthが宣言されてないだけのように見えますが。 この英語メッセージの意味を調べて理解していますか? 単純に訳せば 「"_year"という宣言されてない識別子が使用されています」 「"month"というプロパティは'ViewController *'型のオブジェクトの中にありません」 です。 最初の質問で「viewcontroller not found 」などと全く意味の異なる変なメッセージを書かずに 正確なメッセージ内容を書けば、それだけで一発でわかるものですよ。 ViewController.hのソースが開示されていませんが、 そのソースの@interface~@endの間に @property (assign, nonatomic) NSInteger year; @property (assign, nonatomic) NSInteger month; といった感じで宣言されていますか? もし、この宣言をすればいいだけなのに、それが必要なことがわからないということなら、 Objective-Cの基礎中の基礎を全く理解できてないのだと思います。 あなたが参考にしている 「詳細! Objective-C iPhoneアプリ開発 入門ノート」 は、私は読んだことないですが、「Part2 Objective-Cの基礎知識」 に、そのあたりの説明が書かれてないですか? 詳しくは、Appleが開発者サイトで提供している 「Objective-Cプログラミング言語」 https://developer.apple.com/jp/devcenter/ios/library/documentation/ObjC.pdf‎ や 「Objective-Cによるプログラミング」 https://developer.apple.com/jp/devcenter/ios/library/documentation/ProgrammingWithObjectiveC.pdf でObjective-Cの言語仕様をちゃんと勉強した方がよいと思います。

ifonesapp
質問者

お礼

回答ありがとうございます。 ViewController.hに@propertyでコードを書いたとこプログラムを始めて日が浅く独学なもので勉強方針がよくわからず、とりあえずコードを書いて動くものをつくりながら勉強を進めてやっています。 参考書のそのページは目を通したはずですが、身についていませんでした;確かに書かれていますね。 読んだ時はどんなときに使うのか分かっていなかったと思うので、参考書は繰り返し目を通す必要がありそうですね。 PDFを提示していただいて、勉強方針を提示していただけてありがたいです。 課題として目を通しておきます。 冒頭の件、気をつけます。次回以降の質問の際に参考にさせていただきます。 回答していただいた事を参考にコードを書き換えて無事実行はできたので、次の機能の処理を組んだのですが、月を移動する処理のところで新たに問題が発生しました^^; この件は新たに質問トピを作ろうと思いますが、そこでコードをさらすので良かったら見てください。

ifonesapp
質問者

補足

お礼で間違いました。 補足にて訂正させていただきます。 >ViewController.hに@propertyでコードを書いたとこプログラムを始めて日が浅く独学なもので勉強方針がよくわからず、とりあえずコードを書いて動くものをつくりながら勉強を進めてやっています。 ViewController.hに@propertyでコードを書いたところ、無事に実行できました。

その他の回答 (1)

回答No.1

以下を補足してもらえると、何かわかるかもしれません。 ・エラーが出たのは、ビルド時(orビルド前)ですか?実行時ですか? ・「viewcontroller not found 」というエラーメッセージ内容は この通りですか?前後のメッセージを省略して書いたりしていませんか? 適当に省略して書いたのなら正確なメッセージ内容を書いてください。 ・year,_year,month,_monthはどこにどのように宣言していますか? 正確な内容を書いてください。今回の問題では重要なポイントだと 思います。 ・今回のエラーと直接の関係はないかもしれませんが、 previewメソッドの内容がいろいろおかしいです。 実際にエラーが発生した時のソース内容をそのままコピペしていますか? タイプし直したり、少し加工したりしていませんか? 以下の点が指摘内容です。 (指摘1) - (void) preview:(id *)sender{ の部分は - (void) preview:(id)sender{ とすべきです。 idは*をつける必要ありません。 参考: http://iphone-tora.sakura.ne.jp/kihon_datatype.html (指摘2) self.month=12 の後に「;」がありません。 (指摘3) self.month=12 の次の行の _month--; が意味不明です。 1月の前月として12月を設定した後、もう1カ月減らす理由がわかりません。 いろいろ試行錯誤している途中のゴミが残っているのでしょうか。 self.monthと_monthを混在して使っているのも一貫性がないと思います。

ifonesapp
質問者

補足

回答ありがとうございます。 以下にテキストファイルとしてコードを貼り付けるので醜いコードですが見ていただけるとありがたいです。 (日付の表記はゴリ押しですので見づらくて申し訳ないです。何か他の方法があれば教えていただきたいです。) http://www.dotup.org/uploda/www.dotup.org4892895.txt エラーはビルド時に警告されます。 エラーコードは以下のとおりです。 Use of undercleared identifier '_year' Property 'month' not found on object of type 'ViewController *' UIButtonに引数を渡せて、返り値としてmonthとyearを返せれば楽なのですが・・・ self.monthや_monthなどは適当です。selfや_を付随させてメソッドからViewControllerの変数にアクセスしているようなコードを見ることが多かったので試したのですがうまくいきませんでした。

関連するQ&A

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

  • C言語でのカレンダープログラミングについて。

    今、C言語でカレンダーについてのプログラミングを行っています。 まず月を入力し表示させる。 その年がうるう年かどうか判定させる。 日曜~土曜を表示し、指定した月の日数を曜日に合わせて表示させる。 2008年1月1日は火曜日。 という事実を利用してよい。 という条件で、うるう年かの判定はあるものの年は2008年で固定です。 曜日、指定した月の日数を出すところまでいきましたが。 曜日に合わせて出す事ができません。 今は1月に合わせて、1日が火曜日のところに出るように配置してます。 が、次の週になったときにどのように改行指定すればいぃのかわりません。 また、来月以降の月初めの曜日指定もわからないです。 途中までのプログラムはこれです。 醜いかもしれませんが。 #include <stdio.h> int main(void) { int year=2008; int month,hantei=0,a,b,c; int uru[12]={31,29,31.30,31,30,31,31,30,31,30,31};/*うるう年の時の各月ごとの日数*/ int normal[12]={31,28,31,30,31,30,31,31,30,31,30,31};/*通常の年の各月ごとの日数*/ printf("表示させる月を入力してください。:"); scanf("%d",&month); if(year%4==0||year%100==0||year%400==0) { hantei=1;/*その年がうるう年かどうかを判定し、うるう年なら「hantei」に「1」が代入*/ } if(hantei==1)/*うるう年の場合。*/ { printf("%d年 %d月\n",year,month); printf("%d日\n",uru[month-1]); } else/*通常の年の場合。*/ { printf("%d年 %d月\n",year,normal[month-1]); printf("%d\n",normal[month-1]); } printf("日 月 火 水 木 金 土\n");/*曜日*/ if(hantei==1)/*うるう年の場合*/ { for(b=0;b<=7;b++) { printf(" ");/*火曜日のところまでスペースを空ける*/ } for(c=1;c<=uru[month-1];c++)/*日数表示*/ { printf("%2d ",c); } } return(0); } まだあまりC言語に詳しくないので、簡単に説明できる範囲で御願いします。 説明がわかりにくいかもしれませんが、すいません。

  • Rubyのシンボルについて教えてください

    Rubyのシンボルについて教えてください Rubyのあるライブラリに付随していたサンプルソースを見ており、シンボルが使われているのですがよく理解できません。以下サンプルソースの一部です。 1 def initialize(parent, display_frame, initial_date, calendar_flags) 2 super( parent, 3 :date => initial_date, 4 :style => calendar_flags | RAISED_BORDER) 5 6 @display = display_frame 7 @date = initial_date 8 @weekday_names = %w|Sun Mon Tue Wed Thu Fri Sat| 8 9 evt_calendar self, :on_calendar 10 evt_calendar_month self, :on_cal_month_change 11 evt_calendar_year self, :on_cal_year_change 12 evt_calendar_sel_changed self, :on_calendar_change 13 evt_calendar_weekday_clicked self, :on_calendar_weekday_click 14 end 3,4行目のsuperメソッドの引数に':date => initial_date'とありますが、これは引数initial_dateを変数dateに代入するという意味でよろしいでしょうか。 その場合、7行目の代入式との違いは何なのでしょうか。 また、9行目から13行目にある':on_cal_year_change'などのシンボルは何を表しているのでしょうか。 基本的な質問で恐縮です。色々なサイトを見てもシンボルについての解説が少なく、よく理解ができませんでした。 ご存知の方がいらっしゃいましたらご回答のほどよろしくお願いいたします。

  • 和暦、西暦の変換について(VBA)

    こんにちは、VBAで西暦年から和暦年への変換でエラーが出て原因がよく分かりません。 下のようにして、変換してやろうとしてもyear1,month1,day1の型が違いますとかのエラーが出て、変数の型をInteger、String、 Variantでとろうとしてもエラーばかりです、宜しくお願いします。 もっと簡単に出来る方法があると思うのですが、よく分かりません。 曜日まで「平成○年○月○日(木)」というような表示形式にしたいのです。 year1 = Year(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)")) month1 = Month(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)")) day1 = Day(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)")) youbi1 = Right(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"), 4) - Right(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"), 3) TextBox3.Value = "平成" + (year1 - 1988) + "年" + month1 + "月" + day1 + "日" + "(" + youbi1 + ")"

  • JAVAサーブレットプログラミングで質問

    Javaの開発環境: J2SDK、Tomcat3.3.1を使用しています。 ***プログラミング内容*** import java.io.*; import java.util.*; import java.text.*; import javax.servlet.*; import javax.servlet.http.*; public class MyDate extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException,ServletException{ response.setContentType("text/html; charset=SJIS"); Calendar cdr = Calendar.getInstance(); //現在の時間を取得 int year = cdr.get(Calendar.YEAR); //年(西暦) int month = cdr.get(Calendar.MONTH) + 1; //月 int date = cdr.get(Calendar.DATE); //日 int hour = cdr.get(Calendar.HOUR); //時間 int minute = cdr.get(Calendar.MINUTE); //分 int second = cdr.get(Calendar.SECOND); //秒 PrintWriter pw = response.getWriter(); pw.println("<html><body>今日は" + year + "年" + month + "月"+ date + "日(" + ★ + ")曜日です<br>\n" + "時間は" + hour + "時" + minute + "分" + second + 秒です</body></html>\n");}} といった内容で、取得したい値は日付と時間を取得するプログラミングなんですが、曜日の取得の方法を教えてもらえないでしょうか?取得した日付と時間の表示方法は、 日付: 2002年10月12日 時間: PM8時18分41秒です… といった感じを目指しています。

    • ベストアンサー
    • Java
  • objective-c言語について

    独学でプログラミングを勉強している者です。 メソッドを一つ一つ理解していく時につまずいてしまい質問させていただきました。 -(NSInteger)weekDayOfFirstDay//月の最初の日の曜日を求める { NSDateComponents *comps=[[NSDateComponents alloc]init]; //NSDateComponentsを指定した年、月の1日に [comps setDay:1]; [comps setMonth:month]; [comps setYear:year]; NSDate *theDay=[gCal dateFromComponents:comps]; NSDateComponents *weekdayComps=[gCal components:NSWeekdayCalendarUnit fromDate:theDay]; return [weekdayComps weekday];             ⬆           //ここのweekdayです } このメソッドで最後の return [weekdayComps weekday]; のweekdayがどこのweekdayなのかがわからなく質問させていただきました。 NSWeekdayCalendarUnitのweekdayということであっていますでしょうか。 どなたかご存知の方がいらしましたら解答いただきたいです。

  • Excelの数式について教えてください

    Excelの数式について教えてください カテ違いでしたらすみません Excelの数式にすいて質問です 福祉サービスの利用にかかわる仕事をしています 受給者証の支給開始日や、サービスの利用期間の管理をするため、表にまとめています セルB…サービス種別(機能訓練、生活訓練) セルG…利用開始日 セルM…経過月数 サービス利用期間 機能訓練…18ヶ月まで 生活訓練…24ヶ月まで 注)利用開始が4月1日からの場合、4月を1ヶ月目とする。利用開始が4月2日の場合、翌月5月を1ヶ月目とする これらを踏まえて、回答をいただきたいです Excelにて経過月数を表示させ、現在何ヶ月経過しているか・また、機能訓練18ヶ月、生活訓練24ヶ月を超えた場合、「終了」と表示させるため、セルMにこの様な数式を入力しています =IF(OR(IF(B2="機能訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>18),IF(B2="生活訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>24)),"終了",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))) しかしこの状態では、セルGに利用開始日が入っていない時、セルMには「1328」と表示されてしまいます そのため、 =IF(G2="","",IF(OR(IF(B2="機能訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>18),IF(B2="生活訓練",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M"))>24)),"終了",IF(DAY(G2)=1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")+1,DATEDIF(DATE(YEAR(G2),MONTH(G2),1),DATE(YEAR(NOW()),MONTH(NOW()),1),"M")))) というような式を入れましたが、エラーになります 出来たら新規で入力する列には、値が出ないようにしたいので、空欄にしておきたいのです どこが間違っているのでしょうか? アドバイスいただけるとうれしいです。宜しくお願いします

  • Schemeのプログラミング うるう年関連

    Schemeのプログラミング うるう年関連 Schemeで、 「(1)閏年かどうかを判定する関数leap?(number -> boolean)を定義した後、(2)○年○月の日数は何日かを求める関数num-of-days(number number -> number)を定義せよ」 という内容の課題を出されたのですが、(例えば 2009年の7月→31日 2012年の2月→29日) どうもエラーが出て実行できません。 自分は以下のように組みました。 ;;(1)の関数 (define (leap? year) (cond [(= (remainder year 400) 0) #t] [(and (= (remainder year 4) 0)(> (remainder year 100) 0)) #t] [else #f] ) ) ;;(2)の関数 (define (num-of-days year month) (cond [(and (= month 2)(= (leap? year) #t)) 29] [(and (= month 2)(= (leap? year) #f)) 28] [(or (= month 1)(= month 3)(= month 5) (= month 7)(= month 8)(= month 10) (= month 12)) 31] [else 30] ) ) これを例えば (num-of-days 2008 4) や (num-of-days 1995 12) などとして実行すると、それぞれ30,31という正しい値を返してくれるのですが、 (num-of-days 2008 2) や (num-of-days 1995 2) など、閏年・非閏年に関係無く、2月が絡むと =: expects type <number> as 1st argument, given: false; other arguments were: true というエラーを吐いてしまいます。 何度も見直しましたが、どこが間違っているのか見付けきれません…。どなたか間違いを指摘して頂けると幸いです。

  • カレンダーの表示部分をどうしたらいいか困っています

    Javaでcalコマンドと同じ働きをするカレンダーを作っています。(基本方針として、カレンダー関連のクラスが使えないことになっています。) とりあえず、1753年以降でmonth yearと入力するとyear年month月のカレンダーを表示するのには成功したのですが、(http://cube.mods.jp/MyCalendar.txt)これを1年から1752年にも拡張し、yearと入力するとyear年12ヶ月分のカレンダーを表示するようにしようとしています。(http://cube.mods.jp/MyCalendar2.txt) ここで上手く行かないことが出てきました。 1:1年1月1日のカレンダーの表示がおかしい。 calコマンドでは土曜日から始まっているのが、これだと違う曜日からになってしまいました。MyCalendar.javaではカレンダー表示部分printCalendarは特にこれでも問題なかったのですが、MyCalendar2.javaになっておかしくなったので困っています。 2:カレンダーを横に3つ並べて表示できない calコマンドと見た目も似せて作らなくてはいけないので、カレンダーを横に3つ並べたいのですが、このままだと横に並べられないのでどうしたらいいか考えています。何かスマートな方法が思いついた方、是非教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • iphoneアプリの開発

    電卓アプリを作っています。 今困っているのは 1.割り算で小数点以下の計算ができない。 2.3つ以上の計算が(2×3×4のような)足し算しかできない。 3.間違えて数値を入力した場合に使うバックスペース的なボタンの作り方。 です。 どれか一つでもいいのでアドバイスいただけたらありがたいです。 #import "myViewController.h" @implementation myViewController // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. /* - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization. } return self; } */ // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; startInput = YES; currentValue = 0; } -(IBAction)numberButtonPressed:(id)sender { UIButton *b = (UIButton *)sender; if( startInput ){ // 最初の1桁目が0なら表示しない if( b.tag == 0 ) return; // 新しく表示する文字列を作成 label.text = [NSString stringWithFormat:@"%d", b.tag]; startInput = NO; } else { // すでに表示されている文字列に連結 label.text = [NSString stringWithFormat:@"%@%d", label.text, b.tag]; } NSString *path = [[NSBundle mainBundle] pathForResource:@"button5" ofType:@"wav"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer *audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [audio play]; } -(IBAction)equalButtonPressed:(id)sender { currentValue = sum; sum = sum-sum; // 直前に押された演算子で場合分け if( operation == 0 ){ currentValue += [label.text intValue]; } else if( operation == 1 ){ currentValue -= [label.text intValue]; } else if( operation ==2){ currentValue *= [label.text intValue]; } else if (operation ==3){ currentValue /= [label.text intValue]; } // 表示の更新 label.text = [NSString stringWithFormat:@"%d", currentValue]; startInput = YES; label2.text =@"="; NSString *path = [[NSBundle mainBundle] pathForResource:@"button5" ofType:@"wav"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer *audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [audio play]; } -(IBAction)opButtonPressed:(id)sender { UIButton *b = (UIButton *)sender; // 現在値の保存 if( operation == 0 ){ currentValue= [label.text intValue]; sum +=currentValue; label.text =[NSString stringWithFormat:@"%d", sum]; } // 演算の保存 operation = b.tag; startInput = YES; if( operation == 0 ){ label2.text =@"+"; } if( operation == 1 ){ label2.text =@"-"; } if( operation == 2 ){ label2.text =@"×"; } if( operation == 3 ){ label2.text =@"÷"; } NSString *path = [[NSBundle mainBundle] pathForResource:@"button5" ofType:@"wav"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer *audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [audio play]; } -(IBAction)clearButtonPressed:(id)sender { label.text = @"0"; startInput = YES; label2.text =@""; NSString *path = [[NSBundle mainBundle] pathForResource:@"button5" ofType:@"wav"]; NSURL *url = [NSURL fileURLWithPath:path]; AVAudioPlayer *audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; [audio play]; } /* // Override to allow orientations other than the default portrait orientation. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // Return YES for supported orientations. return (interfaceOrientation == UIInterfaceOrientationPortrait); } */ - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc. that aren't in use. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } @end

専門家に質問してみよう