2011-01-13 15 views
0

でブレークポイントにヒットしません。これは正常な動作ですか?performSelectorは、デバッグモード

NSString* key = state == UIControlStateNormal 
    ? selector 
    : [NSString stringWithFormat:@"%@%d", selector, state]; 
    TTStyle* style = [_styles objectForKey:key]; 
    if (!style) { 
    SEL sel = NSSelectorFromString(selector); 
    if ([self respondsToSelector:sel]) { 
     style = [self performSelector:sel withObject:(id)state]; 
     if (style) { 
     if (!_styles) { 
      _styles = [[NSMutableDictionary alloc] init]; 
     } 
     [_styles setObject:style forKey:key]; 
     } 
    } 
    } 
+0

いいえ、正常ではありません。 '[self respondsToSelector:sel]'を試して、 'YES 'を返すかどうかを確認してください –

+0

したがって、関数はこのセレクタに応答します。これはthree20styleコードからのスナップショットです。私が見るものは、関数が呼び出されるが、返される値が間違っているということです。ブレークポイントを置くとヒットしません – user210504

答えて

1

投稿のコメントの1つでは、このコードはthree20styleライブラリからのものであり、ブレークポイントを配置するとヒットしないことに言及しています。おそらく、Three20のライブラリをリンクするためのThree20の推奨されている方法に従っていると思われます。ビルド設定の「その他のリンカフラグ」セクションでは、おそらくの引数があります。

-force-load libThree20UICommon.a -force-load libThree20.a ... 

問題は、この方法でリンクすると、ブレークポイントが機能しないことが分かります。回避策として、だけで(ないあなたのリリース構成で)あなたのデバッグ構成では、「他のリンカフラグ」からすべてのそれらの引数を削除し、代わりにこれらを置く:

-all_load -ObjC 

私は密接に慣れていないんですよこれらのフラグの間の正確な違いがあります。私が知る限りでは、-all_load -ObjCを使用すると、ブレークポイントが動作することができます。変更の正確な影響がわからないので、リリース構成の設定を変更することはお勧めしません。

+0

私はwikiを見逃しました。指摘してくれてありがとう。 – user210504

+0

ここで提案されているように、私はダミークラスのソリューションを好む:http://blog.binaryfinery.com/universal-static-library-problem-in-iphone-sd マクロを.mファイルに入れてください。重複するシンボルエラーを避けるために、 – LearnCocos2D

0

試し書きスタイル= [self performSelector:@selector(sel)withObject:(id)state];

関連する問題