アプリ版:「スタンプのみでお礼する」機能のリリースについて

Xcode(Object-C)初心者です。
学習用に、単純な電卓(入力は、あえてテキストボックスを利用。足し算のみ)にチャレンジしてみました。
テスキトボックスを利用した際の「入力された値」について教えて頂けたら幸いです。


画面配置は以下の通りです。
・テキストボックス(アウトレット「nyuuryoku」とコネクト。入力は数値のみ)
・ボタン(アクショント「tasu」とコネクト)
・ラベル(アウトレット「shutsuryoku」とコネクト)

最初に後述の「TESTViewController.m その1」のソースを記述したところ、警告が出たので「TESTViewController.m その2」に書き換えて実験しました。
警告が消えたのを確認し、テキストボックスに数値の「2」を入力してボタンタッチした場合、以下のように全く想定外の足し算が行われます。

想定していた答え:2(goukeiの初期値 0 + テキストボックスの 2 = 2)
実際の答え:巨大な桁の数値(ポインタが指すアドレスと思われる)

試しに、「TESTViewController.m その3」のソースで実行したところ、きちんとテキストボックスの中身と同じものが表示されました。

ここで疑問が沸きました。
『テキストボックスの値(nyuuryoku.text)は、「ポインタのアドレス」を意味するのか、それとも「中身」を意味するのか?』です。
仮に「ポインタが指すアドレス」を意味する場合は『*((int *) nyuuryoku.text)』で、「中身」を取り出せると思うのですが、この考え方は間違いでしょうか?
また、そもそも考え方が根本的に間違えている場合、テキストボックスに入力された数値を足し算する場合、どのようにすればよろしいのでしょうか?

恥ずかしながら、こんな単純な事を解決するために1週間ほど調べまくりましたが、いまだに解決に至っておりません。

どなたか、ご教授頂けたら幸いです。



================================================
TESTViewController.h
================================================
@interface TESTViewController : UIViewController {
IBOutlet UILabel *shutsuryoku;
IBOutlet UITextField *nyuuryoku;
}
- (IBAction) tasu;


================================================
TESTViewController.m その1
================================================
int goukei = 0;
- (IBAction)tasu
{
goukei = goukei + nyuuryoku.text;
shutsuryoku.text= [NSString stringWithFormat:@"%d",goukei];
[nyuuryoku endEditing:YES];
}

結果:『Assignment makes integer from pointer without a cast;』の警告が出た。


================================================
TESTViewController.m その2
================================================
int goukei = 0;
- (IBAction)tasu
{
goukei = goukei + *((int *) nyuuryoku.text);
shutsuryoku.text = [NSString stringWithFormat:@"%d",goukei];
[nyuuryoku endEditing:YES];
}

結果:ボタンタッチで、アドレスと思われる数値が表示される。


================================================
TESTViewController.m その3
================================================
int goukei = 0;
- (IBAction)tasu
{
shutsuryoku.text = nyuuryoku.text;
[nyuuryoku endEditing:YES];
}

結果:ボタンタッチで、テキストボックスに入れた値が、期待通りに表示される。

A 回答 (1件)

TESTViewController.m その1



goukei = goukei + nyuuryoku.text;
shutsuryoku.text= [NSString stringWithFormat:@"%d",goukei];

UILabelへの入力時に、「stringWithFormat:」を使っているのに、UITextFieldから取り出すときに、「int + NSString」とやっているのは、矛盾だと感じませんでしたか?前者の操作が正しければ、後者も「shutsuryoku.text = goukei」ですむはず。

「NSString *string = @"Any Text"」という書式が誤解を生んでいるように思えますが、NSStringはあくまでもクラスであって、数値ではないことを、お忘れなく。クラスは、構造体などより格段に複雑な構造をしています。あなたは整数値intに、構造体structを代入できると習いましたか?

goukei = goukei + [nyuuryoku.text intValue];

が正しいコードです。

NSString Class Reference
http://developer.apple.com/library/ios/documenta …

なにかわからないことがあったら、Xcodeヘルプから、リファレンスやガイドに目を通すこと。英文だからといって敬遠する向きがあるかと思いますが、中学程度の英語ができていれば、あとはコンピュータ専用用語以外むずかしいことはありません。日本語で書かれていても、コンピュータ専用用語が難しいことに変わりありませんからね。
    • good
    • 0
この回答へのお礼

ご教授ありがとうございました。
「int + NSString」については、矛盾と言うか、、、違和感を感じていました。
しかしながら完全独学のため勉強が足りてなく、この違和感に関してはスルーしていました。
経験不足、、、と言うか勉強不足のため、自分自身の中で答えの方向性を決め付けた上で、試行錯誤していたため、本質を捉えることが出来ていませんでした。

「あなたは整数値intに、構造体structを代入できると習いましたか?」

このご指導のおかげで、頭の中の霧をスッキリとさせることが出来ました。
本当にありがとうございました。

お礼日時:2011/05/28 21:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!