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属性只是一个NSInteger,因此您可以将其与 1 进行比较。


极客注意:如果您尝试编译该确切代码,则会产生错误,因为注释(//)适用于该行中的任何内容并包含您的右花括号(编辑:OP 编辑​​了问题,所以我的极客笔记没有再申请)

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

:)

尽管如此,它应该没问题。

魔鬼在细节中。sender 只是一个 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 回答