【问题标题】:NSString does not match [duplicate]NSString 不匹配[重复]
【发布时间】:2013-08-06 10:55:10
【问题描述】:

我有以下代码:

- (IBAction)topSecretFetchComplete:(ASIHTTPRequest *)theRequest{

   strFinal = [theRequest responseString];
   NSLog(@"Sattus Code : %@",[theRequest responseString]);

   [self GoTo];
}

我正在使用ASIHttp进行登录。如果登录成功strFinal设置为successfully,如果不是设置为failed

我的GoTo 方法是

-(void)GoTo{
    NSString *failStr = @"failed";
    NSString *successStr = @"successfully";
    if (strFinal == successStr) {
       //Navigate to other xib

    }else
       if (strFinal == failStr) {
            UIAlertView *AlertFail = [[UIAlertView alloc] initWithTitle:@"LogIn Failed !" message:@"Wrong ID or Password" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [AlertFail show];
        }
    }
}

问题是除非strFinal失败,否则不会显示警报。

【问题讨论】:

  • 上面的代码真的有效吗?正如您在代码中提到的字符串不匹配!
  • 哇,5 分钟内重复问题的 8 个答案!!
  • GoTo 方法名也重命名为 camelCase 符号!!

标签: iphone ios nsstring


【解决方案1】:

改变:

if (strFinal == successStr) {

if ([strFinal isEqualToString:successStr]) {

【讨论】:

    【解决方案2】:

    == 运算符比较指针,即使它们的内容相同,它们通常也会不同。 isEqualToString 方法比较它们的内容。所以请像这样比较...

    if ([failStr isEqualToString:successStr])
    {
         // ------- success
    }
    else
    {
          // ---- fail ------
    }
    

    【讨论】:

      【解决方案3】:
       if (strFinal == failStr)
      

      那行不通。你必须使用 isEqualToString。

      if ([strFinal isEqualToString: failStr])
      

      【讨论】:

        【解决方案4】:

        只需从“=”符号编辑 isEqualToString:。这是比较 2 个 NSString 的正确方法。

           -(void)GoTo{
            NSString *failStr = @"failed";
            NSString *successStr = @"successfully";
            if ([strFinal isEqualToString:successStr]) {
               //Navigate to other xib
        
            }else
               if ([strFinal isEqualToString:failStr]) {
                    UIAlertView *AlertFail = [[UIAlertView alloc] initWithTitle:@"LogIn Failed !" message:@"Wrong ID or Password" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
                    [AlertFail show];
                }
        
            }
        

        希望这会有所帮助...

        【讨论】:

          【解决方案5】:

          要比较字符串,您需要使用 isEqualToString: 这是一个如何使用它的示例:

          if ([strFinal isEqualToString: successStr])
          {
              // your code here
          }
          

          【讨论】:

            【解决方案6】:

            像这样更改您的代码,然后检查

            isEqualToString

            返回一个布尔值,指示给定字符串是否等于使用基于 Unicode 的文字比较的接收者。

            - (BOOL)isEqualToString:(NSString *)aString

            参数

            一个字符串

            与接收者进行比较的字符串。

            返回值

            YES 如果 aString 等价于接收者(如果它们具有相同的 id 或者在文字比较中它们是 NSOrderedSame),否则为 NO。

            讨论

            比较使用字符串的规范表示,对于特定字符串,它是字符串的长度加上组成字符串的 Unicode 字符。当此方法比较两个字符串时,如果各个 Unicode 相同,则无论后备存储如何,这些字符串都是相等的。 “字面量”应用于字符串比较时,表示不应用各种 Unicode 分解规则,单独比较 Unicode 字符。因此,例如,表示为组合字符序列“O”和元音变音符号的“Ö”将不等于表示为一个 Unicode 字符的“Ö”。

            特别注意事项

            当你知道两个对象都是字符串时,这个方法是比 isEqual 更快的检查相等性的方法:。

            可用性

            在 OS X v10.0 及更高版本中可用。

            -(void)GoTo{
                        NSString *failStr = @"failed";
                        NSString *successStr = @"successfully";
                        if ([strFinal isEqualToString:successStr]) {
                           //Navigate to other xib
            
                        }else
                           if ([strFinal isEqualToString:failStr]) {
                                UIAlertView *AlertFail = [[UIAlertView alloc] initWithTitle:@"LogIn Failed !" message:@"Wrong ID or Password" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
                                [AlertFail show];
                            }
            
                    }
            

            【讨论】:

              【解决方案7】:

              你需要这样做

              -(void)GoTo{
                  NSString *failStr = @"failed";
                  NSString *successStr = @"successfully";
                  if ([strFinal isEqualToString:successStr]) {
                     //Navigate to other xib
              
                  }else
                     if ([strFinal isEqualToString:failStr] ) {
                          UIAlertView *AlertFail = [[UIAlertView alloc] initWithTitle:@"LogIn Failed !" message:@"Wrong ID or Password" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
                          [AlertFail show];
                      }
              
              }
              

              【讨论】:

                【解决方案8】:

                你可以通过以下方式尝试

                if ([strFinal caseInsensitiveCompare:@"successfully"] == NSOrderedSame)
                    {
                        <#statements#>
                    }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-12-17
                  • 1970-01-01
                  • 2011-03-04
                  • 1970-01-01
                  相关资源
                  最近更新 更多