日々精進

新しく学んだことを書き留めていきます

2012-06-01から1ヶ月間の記事一覧

ナビバーのボタンとボタンの間隔を離す

FixedSpaceをボタンとボタンの間に入れればよい。 以下サンプルコード。 [self pushNavigationItem:[[UINavigationItem alloc] init] animated:NO]; UIBarButtonItem *moveToPreviousGroupButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarB…

transformの注意事項

・以下のようなコードでviewのsizeを変更しても、frameのsizeは変更されない。boundsのsizeは変更される。 self.view.transform = CGAffineTransformMakeScale(2, 2); ・boundsのsizeでframeのsizeを上書きしたい場合は以下のコードを実行する。ただし、fram…

gesture recognizerを全削除する

以下のコードで全削除可能。dealloc時などにどうぞ - (void)dealloc { while (self.view.gestureRecognizers.count) { [self.view removeGestureRecognizer:[self.view.gestureRecognizers objectAtIndex:0]]; } }

UIImageViewに設定したGestureイベントが発生しない

以下のコードでUIImageViewに対するジェスチャーを取得しようとしたら、取得できず困った。 - (void)viewDidLoad{ [super viewDidLoad]; self.zoomInGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(zoomGestu…

UIViewのtransformとframeとbounds

UIViewのtransformプロパティにCGAffineTransformを渡すとViewの変形ができる。 ピンチインやピンチアウトすると拡大・縮小し、指を離すと元の大きさに戻るViewのコードは以下のようになる。 - (void)viewDidLoad{ [super viewDidLoad]; UIPinchGestureRecog…

オブジェクトのアドレスをログに出す

以下のように%pを使えばよい。 NSLog(@"%p", self); 参考:objective c - NSLog an object's memory address in overridden description method - Stack Overflow

Objective-Cでsleep

以下のコードでSleepさせられるらしい。なるほど //次のメソッドの実行を0.5秒遅らせる(AAAがログに表示されるのが0.5秒遅らせる) [NSThread sleepForTimeInterval:0.5]; NSLog(@"AAA"); 参考:http://superdiszo.sakura.ne.jp/WP/?p=133

initメソッドの内部からinitWithNibNameが呼ばれる

以下のコードを実行すると [UIViewController init]の後で[UIViewController initWithNibName]が呼ばれる。 [[UIViewController alloc] init]; initとinitWithNibNameの両方で初期化メソッドを定義している場合などは二回呼ばれてしまうので注意。 そもそもi…

initメソッド内でviewにアクセスすると無限ループになることがある

以下のようにloadViewを定義していて、かつ initメソッド内でself.viewにアクセスしている場合、 無限ループになる。 - (void)loadView { [super setView:self.tempView]; self.tempView = nil; } - (id)initWithView:(GMGridView *)view{ self = [super ini…

UIViewController初期化で不具合

以下のようなコードを書いたらViewとControllerの参照関係がおかしくなった。 - (void)viewDidLoad { [super viewDidLoad]; if (self.delegate){ self.currerntViewController = [[ChartGridViewController alloc] initWithView:self.chartGridView]; self.s…

UIViewControllerのインスタンス変数「view」を置き換えるとエラー

UIViewControllerはXIBファイルと1対1になるよう作るのが基本だと思うが、それだとXIBファイルが細切れになりすぎてわかりにくい。 例えば、UITableViewControllerを継承したMyTableViewControllerを作った場合、UITableViewController.xibはTableView一つだ…

例外設計について

IT

例外についてのいい資料があった。 例外設計における大罪 特にガード句についての指針はなるほどと思った。 ・過剰に防衛するのではなく誰の責任かを明確にする 上記とは関係ないが、 個人的にはクラス内からのメソッド呼び出しの場合は事前条件のチェックは…

objectAtIndexとforとコンパイラ警告

下記のようにループを回して配列を処理するというのはよくあるケースだと思う。 for(int i = 0;i < count;i++){ Model *m = [ary objectAtIndex:i]; } が、これだとコンパイラ警告が出る。理由はobjectAtIndex:(NSUInteger)indexなので、intとNSUIntegerで型…

delegateを使おうとするとEXC_BAD_ACCESS

以下のようにDelegateプロパティをクラスAに作って、 @property (nonatomic, weak) NSObject *delegate; そのクラスの親クラスでdelegateを設定して self.handler.delegate = self; クラスAからdelegateオブジェクトにメッセージを送信するとEXC_BAD_ACCESS…

ViewControllerを作る上で大事なこと

ViewControllerを作る上で大事だと思うことを挙げてみる ・ViewControllerはツリー構造にする。ツリー構造は画面上の領域の親子関係と一致させる。 言い換えると子のコントローラのViewは必ず親のコントローラのSubViewになっている。 各ViewControllerは画…

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)inputTextで入力後の文字列を取得する

以下のDelegateメソッドを使うとUITextFieldに文字を入力するたびに文字入力前の文字列と入力した文字が取得できる。 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)inputText …

NSTimerのfireDateは前回タスクを実行した日時

fireメソッドを実行した日時かと思った。。まぎらわしい

linker command failed with exit code 1 (use -v to see invocation)

以下のコンパイルエラーが出た。 linker command failed with exit code 1 (use -v to see invocation) 他のエラーメッセージにDuplicated〜とあったが、同じ名前のクラスが二つあったのが原因だった。 namespaceって区切れないんだろうか。アプリ全体で名前…

NSTimerで定期的に実行する

一定間隔で何度か処理を実行させたい場合、以下のようにする。 >|objc|NSTimer *tUpdate; NSTimeInterval tiCallRate = 1.0 / 15.0; tUpdate = [NSTimer scheduledTimerWithTimeInterval:tiCallRate target:self selector:@selector(updateScore:) userInfo:…

カテゴリにインスタンス変数は定義できない

以下のようなコードはコンパイルエラーになる。 @interface FlipLabel (CustomMethod) @end @implementation FlipLabel (CustomMethod){ NSString *name; } @end synthesizeも使えない。 >|objc|@interface FlipLabel (CustomMethod) @property NSString *na…

performSelectorの戻り値にクラスクラスタを期待している場合

たとえば、performSelectorの戻り値としてNSNumberかNSDateが返る場合 NSObject *property1 = [obj1 performSelector:@selector(objectWithStockAttribute:) withObject:sortByStockAttribute]; NSObject *property2 = [obj2 performSelector:@selector(obje…

凡ミス

IT

あるオブジェクトのインスタンス変数に何を代入しても値が0から変わらず、なぜ???となっていたが単にオブジェクトの初期化を忘れていてnilになっていただけだったorz 具体的には下記のようなコードで、ここを実行する前にgroupにオブジェクトを代入してな…

UILabelで実際のフォントサイズを取得する方法

IT

autoshrinkをONにしている場合、自動縮小されたフォントサイズは以下で取得できる。 CGFloat actualFontSize; [label.text sizeWithFont:label.font minFontSize:label.minimumFontSize actualFontSize:&actualFontSize forWidth:label.bounds.size.width li…

malloc-history

IT

マルチスレッド環境でEXC_BAD_ACCESSが起こってしまい、困ったのでデバッグ方法を調査。 下記サイトを参考にmalloc-historyを出してみた。 malloc-historyは一番上が最後の操作なので上から順に見ていって自分が書いたコードがあればチェックする。 malloc-h…

Signal received: EXC_BAD_ACCESS (Could not access memory)

IT

コンソールに以下のメッセージが出た場合は無限ループに陥っていることが多い。まあtimeoutしてるからそりゃそうだろって感じですがEXC_BAD_ACCESSを見るとすぐぶらさがりポインタを探す癖がついてるもんで注意してないとはまる。 Signal received: EXC_BAD_…

XIBファイルで定義されたUIコンポーネントの初期化

IT

XIBファイルを読み込んでUIViewControllerを初期化する場合、XIBファイルで定義されているUIコンポーネント(UITextFieldとか)はinitWithCoderメソッドで初期化される。 initWithFrameを使うと勝手に思っててちょっとはまった。 initWithCoderってXIBを使わ…

iOSビルドエラーLd build/Debug-iphonesimulator/〜 normal i386 Undefined symbols for architecture i386:

IT

OSSライブラリを取り込んでiPadアプリをビルドすると以下のエラーメッセージが出た。 Ld build/Debug-iphonesimulator/〜 normal i386 Undefined symbols for architecture i386:これはFrameworkへの参照が足りないことが原因。 QuartzCoreへの参照を追加し…

[[UIDevice currentDevice] orientation]で取得したデバイスの向きがおかしい

IT

多くのサイトでデバイスの向きを取得する方法は以下であると書いてある。 UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; が、これを使うとデバイスの向きの判定が間違うことがあった。具体的には横向きの状態でUIDeviceOrient…

UITextFieldのサブクラスでself.delegate = self;とするとEXC_BAD_ACCESSが発生する

IT

タイトルで書いてあるように設定するとテキストフィールドをタップすると落ちるようになる。 Subclassing UITextField, Delegate issue. - iPhone Dev SDKによると無限ループに陥るらしい。 回避策はDelegate用クラスを作ってそっちにdelegateすること。 ス…