objective-cでの条件分岐

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kosei
記事: 15
登録日時: 11年前

objective-cでの条件分岐

#1

投稿記事 by kosei » 11年前

アプリの情報をsqliteを通してlitaから引っ張って来ています。
アプリ上にlabelでlitaに入っている名前を表示しているのですが、
litaに名前のデータが入っていない場合は、labelを表示せずに、下に表示しているものを上に詰める、という指示を書きたいと思っております。

この場合、私は単純に下記のように書けばいいのだと思っていたのですが、上手くいきませんでした。

コード:

if(name = nil)
{
//下に配置されているagelabelを上につめる
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}
}else{
//名前データがある場合の表示位置
UILabel *namelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}
どのように書けばちゃんと動くのでしょうか?
どうか教えて頂けると幸いです。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: objective-cでの条件分岐

#2

投稿記事 by みけCAT » 11年前

Objective-Cはよく知らないのですが、比較して同じ値なら真を返す演算子は=ではなく==なのではないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kosei
記事: 15
登録日時: 11年前

Re: objective-cでの条件分岐

#3

投稿記事 by kosei » 11年前

本当ですね!
ただ、こちらを直してみたのですが、データが入っていてもいなくても何も変わりませんでした。
再度教えて頂けるとうれしいです。

こちらがしてきて頂いて新しく書いたものです。

コード:

if(name == nil)
{
//下に配置されているagelabelを上につめる
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}else{
//名前データがある場合の表示位置
UILabel *namelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}

しひ

Re: objective-cでの条件分岐

#4

投稿記事 by しひ » 11年前

こんばんは。
何がどう上手くいかないのかよくわからないので、もう少し具体的に教えて頂けませんか?

kosei
記事: 15
登録日時: 11年前

Re: objective-cでの条件分岐

#5

投稿記事 by kosei » 11年前

情報不足で申し訳ございません。

例えば、現在namelabelが画面に表示(CGRectMake(20,350,100,30))されており、その下にagelabelCGRectMake(20,360,100,30)を表示しております。

ただ、litaにnameデータが入っていない場合に、agelabelをnamelabelの位置(CGRectMake(20,350,100,30))に表示したいと考えております。

そのため、下記のようなコードを書きました。

コード:

if(name == nil)
{
//下に配置されているagelabelを上につめる
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
}else{
//名前データがある場合の表示位置
UILabel *namelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,350,100,30)];
UILabel *agelabel = [[UILabel alloc] initWithFrame: CGRectMake(20,360,100,30)];
}
しかし、実際にnameデータが入っていようと、いまいと、namelabelの位置はCGRectMake(20,350,100,30)で、agelabelの位置はCGRectMake(20,360,100,30)で変わりません。

このコードの書き方は間違っていますか?

しひ

Re: objective-cでの条件分岐

#6

投稿記事 by しひ » 11年前

そのコードを見る限りnamelabelもagelabelも無駄になっているように思うのですけど
本当に表示されていますか?

kosei
記事: 15
登録日時: 11年前

Re: objective-cでの条件分岐

#7

投稿記事 by kosei » 11年前

しひさん、ありがとうございます。

はい、namelabelもagelabelも常時表示されてしまいます。
しひさんが言う、無駄になっているというのはどういう意味でしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: objective-cでの条件分岐

#8

投稿記事 by みけCAT » 11年前

kosei さんが書きました:しひさんが言う、無駄になっているというのはどういう意味でしょうか?
おそらく、namelabelやagelabelをローカル変数にしか代入していないので、
(フォーム(?)上のIDで指定するなどの方法が用意されていなければ)条件分岐のあとで参照できない、という意味だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

しひ

Re: objective-cでの条件分岐

#9

投稿記事 by しひ » 11年前

すみません、概ねみけCATさんの書かれている通りです。

ええと、セルはどう作成しているのでしょうか。
Interface Builder上でラベルを並べたりしていますか? また、そのセルを持つためのクラスを作成していますか?

kosei
記事: 15
登録日時: 11年前

Re: objective-cでの条件分岐

#10

投稿記事 by kosei » 11年前

みけCATさん、しひさんありがとうございます。

labelはこのように作っています。

コード:

UILabel *agelabel = [[UILabel alloc] initWithFrame:CGRectMake(0,202,320,28)];
agelabel.text = mission.age;(sqliteのデータを引っ張っています)
phraselabel.font = [UIFont fontWithName:@"HiraKakuProN-W3" size:16];
[self.view addSubview:agelabel];
クラスは作っていません。
labelを作るのには、これを書いただけです。

しひ

Re: objective-cでの条件分岐

#11

投稿記事 by しひ » 11年前

ひどい勘違いをしていました。セルとか全然関係ないですね。
ラベルをaddSubviewした後にframeを変更するとどうなりますか?

kosei
記事: 15
登録日時: 11年前

Re: objective-cでの条件分岐

#12

投稿記事 by kosei » 11年前

frameを変更すると、変更した通りに配置位置が変わったり、labelのサイズ変わります。

しひ

Re: objective-cでの条件分岐

#13

投稿記事 by しひ » 11年前

そうですよね。
name == nil を [name length] == 0 とするとどうでしょうか。

kosei
記事: 15
登録日時: 11年前

Re: objective-cでの条件分岐

#14

投稿記事 by kosei » 11年前

しひさん本当にありがとうございます。
[name length] == 0 とすることでちゃんと動きました。

ただ、なぜ name == nilであると反応がしなかったのでしょうか?
最後にこの点だけご教授頂けると嬉しいです。

しひ

Re: objective-cでの条件分岐

#15

投稿記事 by しひ » 11年前

名前のデータが入っていない場合、恐らくnameにはnilではなく@""(長さ0の文字列)が入っているのではないかと思います。
長さ0の文字列は見た目こそデータがないように見えますが、文字列としてはきちんと存在しているのでnilにはなりません。
というのが答えです。

もっとも、これはnameの値を見ないことには正解かどうかわかりませんけどね。

kosei
記事: 15
登録日時: 11年前

Re: objective-cでの条件分岐

#16

投稿記事 by kosei » 11年前

しひさん

なるほどですね!すごくよくわかりました!
わかりやすい説明ありがとうございます。

みなさんのおかげで解決できました。
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る