0

system1この構文を確認したい (ラジオ グループを押すとき)。この構文は正しいですか:

if([[sender selectedCell ] tag]==1) 
        [prefs addChild:element(@"System", [NSString stringWithUTF8String:"system1"])];
    if([[sender selectedCell] tag]==2) 
        [prefs addChild:element(@"system", [NSString stringWithUTF8String:"system2"])];
    if([[sender selectedCell] tag]==3) {        
        [advancedButton setEnabled:NO];

        [notifs addChild:element(@"UploadedFiles", [NSString stringWithUTF8String:"YES"])];
        [notifs addChild:element(@"DeletedFiles", [NSString stringWithUTF8String:"YES"])];

    }
4

2 に答える 2

3

はい、それは正しいでしょう。tagプロパティは単なるNSInteger1 と比較できます。


Geeky note: その正確なコードをコンパイルしようとすると、コメント (//) がその行に続くものすべてに適用され、右中括弧が含まれるため、エラーが発生します ( EDIT : OP が質問を編集したので、私の Geeky note はそうではありませんそれ以上適用します)

于 2012-07-26T08:57:24.057 に答える
1
if([[sender selectedCell] tag]==1) {/* do something */}

:)

それにもかかわらず、それはうまくいくはずです。

悪魔はここの詳細にあります。送信者は単なる id オブジェクトであるため、NSObject * を超えることはありません。型キャストまたはコンパイラ警告を受け取ることなく、メソッドにアクセスすることはできません。ARC を使用すると、コンパイルさえできない場合があります。

全体像の場合:

(IBAction) performMyAction:(id) sender {

  if ([sender isKindOfClass:[MyVeryOwnClass class]]) {

    MyVeryOwnClass myVeryOwnObject = (MyVeryOwnClass *) sender;

    if([[myVeryOwnObject selectedCell] tag]==1) {
      /* here goes the business logic */

     }
  }
}

同じものをアーカイブする他の方法があります。stender を一時オブジェクト参照に割り当てずに型キャストすることができます。または、 performToSelector: および performSelector を使用して selectedCell にアクセスできます。なぜかこちらの方が好きです。これは読みやすく、デバッグも簡単だと思います。

于 2012-07-26T09:08:27.417 に答える