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

私が確認するもう 1 つのことは、文字列を確認する前に、すべてのデータを受け取っていることです。で文字列のチェックを行っているように見えますが、データが完成しdidReceiveDataてからチェックインを行う方が理にかなっています。connectionDidFinishLoading

于 2009-05-02T07:54:47.373 に答える
0

私を助けてくれたコロスとダンビンに感謝します。問題は確かに空白にありました。あなたが言ったように空白をトリミングしたところ、うまくいきました。

そしてありがとうstackoverflow.com。これは本当に素晴らしいフォーラムです。iPhone 関連のすべてのトピックに役立つアンサーを見つけると同時に、他のプラットフォームにも役立つと信じています。

于 2009-05-04T07:42:42.970 に答える