2011年6月20日月曜日

#defineの改行

#defineが長くて一行で収まらん!って時は改行できます

#define TES(__OBJ1,__OBJ2) {\
 if(__OBJ1!= __OBJ2){\
[__OBJ1 release];\
__OBJ1 =[__OBJ2 retain];} }

\のあとは何も入力せずに次の行にいくこと。スペースも駄目。
ちなみに"\"の入力はmacの場合「alt+¥」です。

2011年6月16日木曜日

UITabBarControllerのselectedIndex

UITabBarControllerのプロパティ、selectedIndexは
選択中のタブ番号(左から0~)返してくれるやつなんですが、
タブ切り替えでこのselectedIndexが変わるタイミングが若干ずれることに気づいた。

タブ0→タブ1に切り替えた際のタブ1の
ビューコントローラーで走るビューサイクルの例です。
※自分が乗ってるタブバーのインスタンス(tabBar)はどうにかして取得すること前提

-(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
     NSLog(@"nowTabIndex:%d",tabBar.selectedIndex);//この時点ではtab0
}

-(void)viewDidAppear:(BOOL)animated{
     [super viewDidAppear:animated];
     NSLog(@"nowTabIndex:%d",tabBar.selectedIndex);//この時点ではtab1
}

…タブ切り替わった瞬間にindex変わろうよ!!

ところでタブバーに乗ってるビューコンからタブバーのインスタンスって
どうやって取得するんだ…?ナビコンみたいにセルフに問い合わせればたどり着けるの?
ぬーんタブバーあまり扱わないから未知数です…。

デフォルトフォント

意外に知ってると便利なのでデフォルトシリーズは
ここに書き出していく予定。
ログ出したらこうなった。

UIButtonのデフォルトフォント(xcode上で作成の場合)
 font-family: "Helvetica"; font-weight: normal; font-style: normal; font-size: 18px
 ※xibから作ったUIButtonのデフォルトフォント違うかもしれん

2011年6月1日水曜日

NSDictionaryの高速列挙

allValuesをつけると直接オブジェクトを取り出せるので覚えておくと便利かも。
そのかわりキーわからんけども。

-(void)firstEnum:(NSDictionary *)dict{
     for(NSString * keyname in dict){
            NSLog(@"キーは%@",keyname);
     }

     for(id obj in [dict allValues]){
            NSLog(@"オブジェクトは%@",obj);
     }
}

2011年5月28日土曜日

例外処理とAutoreleasePool

例外処理内で作ったAutoreleasePoolは@fainallyで解放しなくていいらしい

-(NSMutableArray *)testes{
 NSMutableArray * returnArr = [NSMutableArray array];
     @try{
       for(int Cnt= 0;Cnt<100;Cnt++){
           NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];
       //[returnArr addObject:@"なにか"];  
            NSLog(@"%d番目は%@",Cnt,[returnArr objectAtindex:Cnt]);//←例外発生
            [pool release];//ここにはこない
       }
     }@catch (NSException * e) {
           NSLog(@"%@",e);
     }@finally {
     //pool解放なし
     }
     return returnArr;
}
…逆に今までfinallyに書いてたからクラッシュしてたのかしらー。

参考 NSAutoreleasePool祭り

2011年4月27日水曜日

キー値監視について

監視元1に対して監視先オブジェクトを複数作れる通知方法。
キーに関連づける値は一個じゃなくてもいいので依存度があまり高くない。
呼び出しメソッドの第2引数には監視先オブジェクトが入る。
第3、4は…よくわかってないです。
登録の解除は忘れずに。

/*---------監視するクラス---------*/

//ViewControllerの場合はwillAppearその他はinitでキー監視の宣言
-(void)viewWillAppear:(BOOL)animated{
      KansiClass * kansi = [[KansiClass alloc] init];
    //キー値監視登録
     [kansi addObserver:self forKeyPath:@"keyPath"
                            options:0 context:NULL];
}

//監視キーに変更があった場合に呼び出される
-(void)observeValueForKeyPath:(NSString*)keyPath
                                             ofObject:(id)object
                                                change:(NSDictionary*)change
                                                context:(void*)context{
       if([keyPath isEqualToString:@"keyPath"]){
               //値変更したらこのクラスでやりたいことを記述
        }
}

-(void)dealloc{
//登録の解除
      [kansi removeObserver:self forKeyPath:@"keyPath"];
   [kansi release];
      [super dealloc];
}
/*---------監視されるクラス内---------*/

-(void)changeKansi{
      [self willChangeValueForKey:@"keyPath"];
      //監視値の変更
      kansiValue = FALSE;
     [self didChangeValueForKey:@"keyPath"];
}

2011年3月3日木曜日

iPad2のミラーリング機能

iPad2が正式に発表されましたね。
なんとミラーリング機能が追加されたとか。…やっとか;
Apple Digital AVアダプタが必要らしいです。

↓詳しくはこちら↓
あなたの画面を共有しよう!Apple Digital AVアダプタ。

Apple Digital AVアダプタがあっても
iPad2以外はミラーリングできないとか。へえ。