objc

NSStringを結合する方法

NSStringを+とかで結合できないのかな、と調べていて、なんだ結合するよりstringWithFormatを使う方が楽じゃないか、と気づいた。 NSString* msg = [NSString stringWithFormat:@"%d, %d, %d, %d", score[0], score[1], score[2], score[3]];

UIAlertViewをブロッキングにするには

UIAlertViewDelegateプロトコル(Javaでいうところのインターフェイス?)を使う。 @interface MyClass : MotherClass <UIAlertViewDelegate> { ... } このプロトコルが保証するのはalertViewメソッドの存在 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSIn</uialertviewdelegate>…

XCode思い出し中

Cmd+Bでビルド、Cmd+Sht+Bでビルド結果、Cmd+Enterでビルドして実行 Escで補完, Ctrl+/で次のプレースホルダー, 右矢印で表示中の補完候補で確定 Cmd+Opt+Upでfoo.mとfoo.hの切り替え NSLog(@"hoge"); NSLog(@"%f, %f", x, y); NSLog(@"%@", nsstr); エディ…

音をならすメモ

typedef struct AURenderCallbackStruct { AURenderCallback inputProc; void *inputProcRefCon; } AURenderCallbackStruct;typedef OSStatus (*AURenderCallback) ( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inT…

flipするアニメーション

[UIView setAnimationDuration:1]の単位をミリ秒だと勘違いして1000って入れていたせいでアニメーションがうまく設定されていないように見えて(実は超スロー)はまった。 [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:1]; [UIVi…

error: synthesized property 'foobar' must either be named the same as a compatible ivar or must explicitly name an ivar

いま実機でないと重要な機能が試せないアプリを作っていて、それ以外の機能を作るのでシミュレータでいいかと思ってSDKを切り替えたらこういうエラーが出るようになった。 error: synthesized property 'foobar' must either be named the same as a compati…

NSTimerとNSThreadの違い

[[NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(aMethod:) userInfo:aInfo repeats:NO] fire] ってやった時に呼ばれるaMethodの引数はNSTimerのインスタンスだが [NSThread detachNewThreadSelector:@selector(aMethod:) to…

NSTimer使ってNSInvocationのout of boundエラー(NSInvalidArgumentException)

結論から言うとNSTimerは関係なくて、何かのメソッドシグニチャが期待されているものと異なる場合にこういうエラーになることがあるみたい。NSThreadを使っていたコードをNSTimerを使うように書き換えた時に書き換えていない部分でエラーが出たのでNSTimerが…

EXC_BAD_ACCESS

実機で実行するとEXC_BAD_ACCESSで落ちて、シミュレータでは問題なく、実機でステップ実行して原因を絞り込もうとすると再現しないというなんとも典型的なハイゼンバグ。初iPhoneアプリなのに「時間のかかる処理にプログレスバーが出ないなんて許せない」な…

画像の切り取り

こうかな CGRect crop_rect = [[info objectForKey:UIImagePickerControllerCropRect] CGRectValue]; UIImage* smallImage = [UIImage imageWithCGImage:CGImageCreateWithImageInRect( originalImage.CGImage, crop_rect)];でもcrop_rectが300x301で、この…

UIAlertViewの消し方

[alert removeFromSuperview]したら操作不能になってしまった。正解は[alert dismissWithClickedButtonIndex:0 animated:FALSE]

error: can not use an object as parameter to a method

単にアスタリスクを忘れているだけだった 誤: -(void)update_progress_bar:(NSNumber)ratio 正: -(void)update_progress_bar:(NSNumber*)ratio