0

我想做一个激活模块,它将发送一个带有 PIN 码的 http 请求,然后读取响应。如果响应为“OK”,则会打开一个主菜单。问题是我收到的响应为“OK”,但我无法将它与 NSString @“OK”进行比较。如何将http响应与字符串进行比较?

这是我的一段代码:

-(IBAction) submitPINAction:(id) sender
{
    printf("inside submit btn");
    mydata = [NSMutableData alloc];
    NSURLRequest *request = [NSURLRequest  requestWithURL:
                             [NSURL URLWithString:@"http://192.168.100.3/WWTF/activationApp.php?PIN=11111"]
                             
                                              cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
    if(connection)
    {
        mydata = [[NSMutableData data] retain];
    }
    else
    {
        //Handle error : Not received data
        printf("No internet connection");
    }
}


-(void)connection:(NSURLConnection *)theConnection
   didReceiveData:(NSData *)incrementalData {
    printf("data received");
    if (mydata==nil) {
        mydata =
        [[NSMutableData alloc] initWithCapacity:2048];
    }
    [mydata appendData:incrementalData];
    NSString *temp = [[NSString alloc] initWithData:mydata encoding:NSASCIIStringEncoding];
    
    NSString *string1 = @"OK";
    
    
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    
    if([string1 isEqualToString:temp]){   // HERE IS THE PROBLEM, THE STRINGS ARE NOT GETTIN COMPARED
    
        [prefs setBool:TRUE  forKey: @"activationKey"];
        // show the main menu
        mainMenuController *mmC = [[mainMenuController alloc]initWithNibName:@"mainMenu" bundle:[NSBundle mainBundle]];
        self.mmainMenuController = mmC;
        [mmC release];
        [self.view addSubview:[mmainMenuController view]];
    }
    else{
        printf("in else");
        [prefs setBool:FALSE  forKey: @"activationKey"];
        //show an alert
        UIAlertView *alertActivationFail = [[UIAlertView alloc] initWithTitle:@"Activation Failed!" message:@"PIN is Incorrect" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertActivationFail show];
        [alertActivationFail release];
    }
}
4

3 回答 3

5

我将使用以下行来查看响应实际上是 OK 字符串,因为它可能包含空格或其他字符。

NSLog(@"string1 = '%@' temp = '%@'", string1, temp);

将此行放在这样的 if 语句之前...

NSString *string1 = @"OK";
NSLog(@"string1 = '%@' temp = '%@'", string1, temp);
if([string1 isEqualToString:temp]){   // HERE IS THE PROBLEM, THE STRINGS ARE NOT GETTIN COMPARED

如果额外的空格是比较失败的原因,那么您可以使用以下方法从字符串中修剪空格:

+(NSString *)trim:(NSString *)value {
    return [value stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
} 
于 2009-05-02T07:34:05.800 回答
0

我要确保的另一件事是,您在检查字符串之前已收到所有数据。看起来您进行了字符串签入,但在数据完成后进行didReceiveData签入可能更有意义。connectionDidFinishLoading

于 2009-05-02T07:54:47.373 回答
0

感谢 Korros 和 danvin 帮助我。问题确实出在空格上。正如你所说,我修剪了空格,它起作用了。

并感谢 stackoverflow.com。这真的是一个很棒的论坛。我为所有 iPhone 相关主题找到了有用的分析器,同时我相信它也有助于其他平台。

于 2009-05-04T07:42:42.970 回答