iPhoneアプリを作ってみた。-逆ポーランド記法電卓編-
見事にハマる
難しかったところは特になかったが、何度かハマった。
まだ作り始めたばかりなのにSIGABRT受け取って焦った。
xibファイル編集してアウトレットとかアクションをちょこちょこ作って接続して。。
「とりあえず走らせてみよう」
↓
エラー
原因は、作ったアウトレットをxibファイルのオブジェクトと接続した後に、「やっぱこれ要らないや」ってどちらも削除した際に、InterfaceBuilderから接続を削除していなかったため。
結果、存在しないアウトレットとオブジェクトが接続されている状態になったため、起動時にクラッシュしたものと思われる。あ、ビルドは通るのね。
こういうことがあるたびに「それくらいwarning出してよorz」って思ってしまうんだが、きっと僕が不注意すぎるんですね。
オブジェクト作ってなかった
NSMutableArrayを宣言だけしてメモリ確保忘れてた。忘れててもaddObjectできるのかよ。それくらいwarning(ry
整数かどうかの確認ってどうやるんだ?
ドキュメントで正規表現調べてがんばろうと思ったけど、ググったらコードあったから参考にしました
Re: NSString が整数値かどうか調べる関数 - terazzoの日記
ここらへん。
感想
逆ポーランド記法ってのは多分スタックポインタの操作を練習するのに最適だから定番練習プログラムになってるんだと思うが、NSMutableArrayが賢すぎて結局スタックポインタ使いませんでしたね。
なんの練習だかよくわからなくなっちゃったけど、Xcodeでの開発の練習にはなっているので問題なしとしましょう。
ソース
スタッククラスの部分のソース。
// StackController.h #import <Foundation/Foundation.h> @interface StackController : NSObject { int _stackCount; NSMutableArray* _stack; } @property (readonly) int stackCount; - (void)push:(int)value; - (int)pop; @end // StackController.m #import "StackController.h" @implementation StackController @synthesize stackCount = _stackCount; #pragma mark - Initialize - (id)init { if ( self = [super init] ) { _stack = [NSMutableArray array]; //111116 } return self; } - (void)dealloc { [_stack release], _stack = nil; } #pragma mark - Accessor - (int)stackCount { return [_stack count]; } #pragma mark - Method - (void)push:(int)value { [_stack addObject:[NSNumber numberWithInt:value]]; } - (int)pop { int lastValue = [[_stack lastObject] intValue]; [_stack removeLastObject]; return lastValue; } @end