UIActionSheet标题的比较失败

时间:2012-09-22 20:56:47

标签: objective-c nsstring ios6 uiactionsheet

我只对iOS 6有问题。
这段代码适用于所有其他版本 我没有得到任何警告。

代码不符合if条件 即使NSLog正确显示buttonTitle的值为“选择目标”,也无法将present.title与字符串Select Goal进行比较。

- (void)actionSheet:(UIActionSheet *)presentSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    NSString *buttonTitle=[presentSheet buttonTitleAtIndex:buttonIndex];
    NSLog(@"button title  is %@", buttonTitle);

    actionSheet.delegate =self;
    if (presentSheet.title == @"Select Goal") {
        self.goalsTextField.text =buttonTitle;
        [self.goalsTextField resignFirstResponder];

    }

    if (presentSheet.title ==@"Select Level") {
        self.levelTextField.text =buttonTitle;
        [self.levelTextField resignFirstResponder];

    }

 }

3 个答案:

答案 0 :(得分:1)

不要与==进行字符串比较,请使用isEqualToString:

答案 1 :(得分:0)

我不确定比较失败的原因,但我可能会对UIActionSheet+Blocks感兴趣吗?我一直认为UIAlertViewUIActionSheet有一个非常糟糕的回调API,因为代码更改非常脆弱,并且对于按钮的运行时参数检查非常麻烦。

UIAlertView+BlocksUIActionSheet+Blocks将为您提供基于块的API,您可以更轻松地动态确定要向用户显示的选项,但更重要的是,执行阻止用户进行选择。对于开发人员来说,这个API make无限脆弱且容易出错。它还使您在视图控制器中有多个警报和操作表时不必进行任何条件编码。四处都是纯粹的胜利。我非常困惑为什么Apple没有在UIKit中创建基于块的API。

答案 2 :(得分:0)

您无法使用==比较字符串值,您尝试比较NSString 对象,并编写类似presentSheet.title == @"Select Goal" 的语句,您正在比较对象指针 (即内存位置,并不总是相同。可能几乎从未实际上。)不是字符串值您认为您正在比较

要比较字符串值,有NSString方法,您需要的是:

if([presentSheet.title isEqualToString:@"Select Goal"])

应该这样做。