複数のUIAlertViewでdelegateを使い分ける

tagを使う。

//アラート画面のタグを宣言
static const NSInteger firstAlertTag = 1;
static const NSInteger secondAlertTag = 2;
 
 
//アラートを作るときにタグを設定
    UIAlertView *firstAlert = [[UIAlertView alloc]
                          initWithTitle:nil
                          message:@"This is firstAlert"
                          delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];
    firstAlert.tag = firstAlertTag;
...
    UIAlertView *secondAlert = [[UIAlertView alloc]
                          initWithTitle:nil
                          message:@"This is secondAlert"
                          delegate:self
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];
    secondAlert.tag = secondAlertTag;
...
 
//アラートのボタンが押されたときに呼ばれるデリゲーションメソッド
- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    //タグをチェック
    if (alertView.tag == firstAlertTag)  {
        処理....
    }else if (alertView.tag == secondAlertTag)  {
        処理....
}
http://49hack.net/?p=282

警告達

incomplete implementation

.hで宣言したメソッドが.mにないと出てくる。
Storyboardから始めるiPhoneアプリ開発 Incomplete implementation

expression result unused

返り値使ってない行に出てくる。

戻り値を使っていない行に対して "Expression result unused" という警告が表示される。
(例)[[NSObject alloc]init];
(回避策) 行頭に (void) を付ける

(void) [[NSObject alloc]init];
objective-c - memo

ただ、この使い方で間違いない場合、コンパイル時に警告が表示されるのは間際しいので、この時に限って "Expression result unused" を表示させないようにしてみます。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-value"
 
[[_EzFlashStatusBarWhenMemoryWarning alloc] init];
 
#pragma clang diagnostic pop
EZ-NET: Expression result unused 警告を表示しないようにする

Capturing 'xxx' strongly in this block is likely to lead to a retain cycle

block構文でselfやインスタンス変数を参照すると出てくる。

@implementation Hoge
-(void)hogeMethod{
  hogeHandler = ^(Fuga *fuga){
    [self someMethod:fuga];
  };
}
@end

これ,selfがずっと存在するからhogeHandlerの参照が減らないのね.だから__blockつけてやると,Reference Count使わない指定ができるそうな.


訂正版

@implementation Hoge
-(void)hogeMethod{
  // ここでselfを別にコピー(こいつはブロック専用だから参照カウントを減らせてGCできる)
  __block Hoge *blockself = self;
  hogeHandler = ^(Fuga *fuga){
    [blockself someMethod:fuga];
  };
}
@end
= ARC retain cycle - ぺっくブログミラー@peccul

Local Declaration of "xxx" Hides Instance Variable

ローカル変数とインスタンス変数の名前が被ってると出てくる。
Objective-Cと戦うブログ: 「Local Declaration of "xxx" Hides Instance Variable」というエラーについて

「Could not launch “アプリ名.app」っていう実機に書き出せないエラー

エラーの再現方法がよくわからない。

対処法は、以下の通りです。

  1. バイスをケーブルから抜く
  2. バイスからアプリを削除する
  3. Xcode を終了する(⌘ + q)
  4. DerivedData を削除する(/Users/ユーザー名/Library/Developer/Xcode/DerivedData/アプリ名-dqmislmaqlyjnyfcqkakyneegmiu/)
  5. Xcode を起動して、もう一度ビルドする
http://rakuishi.com/iossdk/4515/

追記

Bundle Identifier途中で変えたら発生した。

後方互換モードかそうでないか

IE8の後方互換モードのみに何かしたい機会があった。
IE8以降はUserAgentに"Trident"ってのがはいってるらしく、それ+ドキュメントモードの判定で判別できるらしい。

function isIECompatibility() {
    var ua = navigator.userAgent;
    if (ua.indexOf('MSIE') == -1) {
        return false;
    } else if (ua.indexOf('Trident') != -1 && document.documentMode && document.documentMode >= 8) {
        return true;
    } else {
        return false;
    }
};
IE8,9で後方互換モードかどうかをチェックする - Cheese Pie

スマホ向けスライドショーjQueryプラグイン

iPhone・Android・PCでフリックを実装できるjQueryプラグイン - Develo.org
・フリックでスライド動かせる
・ハッシュチェンジ対応
Androidでまともに動く
という条件がクリアできた。重宝。