Objective-Cの条件分岐について

このQ&Aのポイント
  • Objective-Cの条件分岐についてお伺いしたい事があります。
  • ボタンの名前をcurrentTitleプロパティで取得し、その名前を元に条件分岐処理を行いたく、下記の通りコードを書いているのですが、真の条件に適合しません。
  • コードの書き方が悪いんでしょうか?最近Objective-Cの勉強を始めたばかりで右も左も分からない状態です。どなたかご教授いただけないでしょうか?
回答を見る
  • ベストアンサー

Objective-Cの条件分岐についてお伺いしたい事があります。

Objective-Cの条件分岐についてお伺いしたい事があります。 ボタンの名前をcurrentTitleプロパティで取得し、その名前を元に条件分岐処理を行いたく、下記の通りコードを書いているのですが、真の条件に適合しません。 コードの書き方が悪いんでしょうか?最近Objective-Cの勉強を始めたばかりで右も左も分からない状態です。どなたかご教授いただけないでしょうか? -(action) action: (id)sender; { UIButton* button = sender NSString * Str = button.currentTitle; if (str == @"ボタンの名前") {   条件が真の場合の処理 } }

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

  • ベストアンサー
  • seastar3
  • ベストアンサー率69% (99/142)
回答No.1

Objective-Cの文字列オブジェクトに == は通用しません。 isEqualToString メソッドを使います。したがって、 if (str == @"ボタンの名前") を、 if ([str isEqualToString:@"ボタンの名前"]) と記述すれば思惑通りに反応してくれます。

関連するQ&A

  • 【Objective-C】文字列の連結でいい方法ありませんか?

    Objective-Cで文字列、NSStringの連結をするのに、stringByAppendingString:を使って以下のように書きました。 NSString *str1 = @"AAA"; NSString *str2 = [str1 stringByAppendingString: [NSString stringWithCString: "BBB" encoding: NSUTF8StringEncoding]]; しかし、この冗長なコードを何度も書くのは大変です。 そこで、マクロを使って以下のように整理してみました。 #define AS(A,B) [(A) stringByAppendingString:([NSString stringWithCString: B encoding: NSUTF8StringEncoding])] NSString *str2 = AS(str1,"BBB"); 少しはマシになりましたが、できれば+演算子を使って、以下のような、直感的にもわかるコードにしたいです。 NSString *str2 = str1 + "BBB"; NSStringクラスの+プラス演算子を書き換えて、(メソッドオーバーライド) NSString *str2 = str1 + "BBB"; の様ななコードを書く事はObjective-Cで、できるのでしょうか? 以上、ご指導のほど、宜しくお願いいたします。

  • objective-cでUIButtonを作成後

    xcodeのobjective-cで書いています。 UIButtonをプログラムで複数生成し、 その後別のボタンを作成し、そのボタンを押したら任意のボタンを削除(隠すのではなく)する方法を模索しています。 @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. for (int i = 0; i < 5; i++) { UIButton *bt = [UIButton buttonWithType:UIButtonTypeRoundedRect]; bt.frame = CGRectMake(20.0f, 20.0f + (i * 25), 20.0f, 20.0f); bt.tag = i; [bt addTarget:self action:@selector(pushBt:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:bt]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pushBt:(UIButton *)sender { [sender removeFromSuperview]; } 押したボタンを消す事はできるようなのですが、 一度に全て消す、tagの1と2を消す等の方法や考え方などご教授お願いします。

  • Objective-C[NSMutableStringクラスについて]

    Objective-C[NSMutableStringクラスについて] はじめまして。 NSMutableStringクラスで宣言したインスタンスをどこからでも呼び出したいと思い 以下のコードを作りました。 NSMutableString extern *Mixbox; -(IBAction)TestTime:(id)sender{ NSString *Time=@"ただいまの時間\n "; NSDate *date=[NSDate date];//時間の設定 NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; [formatter setDateFormat:@"yyyy:MM:dd::hh:mm:ss"]; NSString *str = [formatter stringFromDate:date]; [Mixbox appendString:str]; [Mixbox appendString:Time]; self.flowView.text=(@"%@",Mixbox); } ビルドするとエラーになります。 どこからでもインスタンスを呼び出したい場合どのようにすれば良いのでしょうか? 回答をお願いします。

  • objective-cとC++の連携

    cocos2dを使ってobjective-cの関数を呼び出したい場合、返り値がstringなどvoidでないときどう記述すればいいのでしょうか? //DBClassBridge.h string DBClassBridge::getStringColumn(string table, string field, string where, id target) { [DBClass_objc getStringColumn:[[[NSString alloc] initWithCString:table.c_str() encoding:NSUTF8StringEncoding] autorelease] field:[[[NSString alloc] initWithCString:field.c_str() encoding:NSUTF8StringEncoding] autorelease] where:[[[NSString alloc] initWithCString:where.c_str() encoding:NSUTF8StringEncoding] autorelease] target:(id)target];   //return ?? } returnのあとに何か入れる感じですかね? わかる人いたら是非お願いします。

  • Objective-Cのメモリ管理について

    iPhoneのUIBarButtonItem(右上のボタン)を押すと、xamppのPHPで作ったwebサーバーにPOSTを送り、送ったPOSTの内容で異なるデータをiPhoneに返す仕組を作っていたら、Objective-Cのメモリ管理でつまづきました。 どうすれば以下のソースにあるNSString *strがメモリ解放されないかを知りたいです。 【ソース】 - (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data { //PHPのデータ char* p = (char*)[data bytes]; NSString *str = [[NSString alloc] initWithUTF8String:p]; NSLog(@"str_RETAIN:%d",[str retainCount]); ←問題の箇所 NSRange rng; rng = [str rangeOfString:@"比較したい文字列"]; if(rng.length > 0) ...以下、strに関係する部分はないので省略 } この時、NSStringでalloc,initWithUTF8Stringを呼び出した後のNSLogのretainCountは呼び出すたびに常に1が出るようにしたいのですが、なぜか0になったり1になったりしてしまいます。 コンソール画面で何度も試しましたが、0になったり1になったりするのに法則性がなく、最初0で次押すと1,1,1,0,1,1,0とか、最初1,0,1,0,0,1,1,1,1,1...など、乱数のような状況になってます。 なので、0になった場合は、セットした値が無くなってしまっていて、次の部分文字列の比較(rng = [str rangeOfString:@"比較したい文字列"];)の部分で正しい動作ができなくなってしまってます。 送られてくるPHPのデータ(char *)は特に問題なさそうです。 後、サーバーに接続出来ない場合は、別の処理でエラー判定が出来るようになっているので、最初からデータがないという事はないです。 分かる方いましたら、ご回答お願いします。

  • Objective-C if

    iPhone アプリ開発での質問です if文で条件をつける際 3つの条件が整ったらアクションを実行というようにさせたいのですがどうすれば良いのでしょうか? hiddenで隠していたUIButtonが表示されていた場合、実行とすると if(XXX.hidden){ }else{表示なのでここに処理} というようになりますよね? これで指定した3つが表示されていた場合実行というようにしたいです

  • objective-cでの引数について

    お世話になります。 引数の使い方について以下の様な事が可能なのか分からなくて困ってしまい質問します。 検索等は行いましたが目的のものが見つからなかったので、、 以下ですが、あるボタンをタップすると、buttonDidPushを実行するプログラムがあったとします。 @implementation ViewController -(void)viewDidLoad{ ~中略~ [button addTarget: self action:@selector(buttonDidPush) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:button]; } -(void)buttonDidPush{    処理 } @end ここで聞きたいのは、 ボタンのところで、引数(数値変数 x )をbuttonDidPushに持っていくことができるかどうかなのですが、 例えば以下のように変更しました。 action:@selector(buttonDidPush) ↓ action:@selector(buttonDidPush:x:) -(void)buttonDidPush{ ↓ -(void)buttonDidPush(Integer)x{ としましたが、build successで一応シミュレータは動きましたが、 ボタンをタップするとmain.mのほうでエラーが出てしまい動きませんでした。 なんとなく文法が間違ってるんじゃないかと思いますが、どこか心当たりのある方、よろしくお願いいたします。 尚、数値xはintで宣言済みです。 main.mでのエラー内容は int retval = UIApplicationMain(argc, argv, nil, @"testAppDelegate"); のラインで、「Thread1:Program received signal: ""SIGABRT.」と出ていました。 また、私自身が何かobjective-cの文法について重大な勘違いをしている可能性もあります・・

  • 条件分岐

    以下の条件分岐について教えてください。 条件:str の 文字に ”0.0”や”0000”などの入力があっ   た場合、NG_FLAGを返したいのです。 どこがいけないのか、教えてください。 int CheckData2(char *str) {  if (str[0] == '0');{   printf("%c", str[0]);   if (str[0] == '0' && str[1] == '.'){    puts("CheckData2はOK_FLAG");    return OK_FLAG;   } else if (str[0] == '0' && str[1] == '.'){    puts("CheckData2はNG_FLAG;");   return NG_FLAG; } } puts("CheckData2はOK_FLAG"); return OK_FLAG; }

  • Objective-C ボタンを動かすには

    Objective-Cはまったくの初心者で、iPhone用のアプリを作るのに書籍を見ながらサンプルをいじっています。 画像をタップしたらその画像自体が動くようなものを作りたいのですが、 RoundRectButtonを1個だけ配置して 【imageTestViewContollorer.h】 @interface imageTest1ViewController : UIViewController { IBOutlet UIButton *myButton; } -(IBAction)tapBtn; @end 【imageTestViewContollorer.m】 @implementation imageTestViewController -(IBAction)tapBtn{ myButton.center=CGPointMake(50,50); [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:2]; myButton.center=CGPointMake(160, 240); [UIView commitAnimations]; } としてみましたが、コンパイルエラーなどはありませんでしたが、ボタンを押しても何も起こりませんでした。 IBOutlet UIButtonが臭いような気もしているのですが、UIImageViewにするとRoundRectButtonと線を繋げなくなりますし、どう直してよいか見当もつかず困っています。 画像がタップされたら動く、みたいなものをそもそもRoundRectButtonに画像を割り当てた方がいいのかImageViewにタップされた場合の処理を割り当てた方がいいのかどうかもよくわかりません。 よろしくお願いいたします。

  • objective-cに関する質問です。

    objective-c初心者です。以下の参考書に載っていた初期化という処理についていまいち理解できません。 理解できない所は、何度も出てくるselfが何者なのか、というコトと、 [self.view addSubview:_textField]; このaddsubviewは何なのかということです。 調べても分からなかったので、親切な方教えて下さいますと幸いです。 よろしくお願い致します。 _____________________________ //初期化 - (void)viewDidLoad { [super viewDidLoad]; //テキストフィールドの生成 _textField=[self makeTextField:CGRectMake(10,20,300,32) text:@""]; [self.view addSubview:_textField]; //書き込みボタンの生成 UIButton* btnWrite=[self makeButton:CGRectMake(55,62,100,40) text:@"書き込み" tag:BTN_WRITE]; [self.view addSubview:btnWrite]; //読み込みボタンの生成 UIButton* btnRead=[self makeButton:CGRectMake(165,62,100,40) text:@"読み込み" tag:BTN_READ]; [self.view addSubview:btnRead]; }

専門家に質問してみよう