Как сравнить данные ответа HTTP NSURLconnection со строковым значением в iphone? - PullRequest
0 голосов
/ 02 мая 2009

я новичок в программировании для iphone ...... я хочу создать модуль активации, который будет отправлять http-запрос с PIN-кодом, а затем читать ответ ... если ответ "OK", он откроется с главным меню ........... проблема заключается в том, что я получаю ответ как "ОК", но я не могу сравнить его с NSString @ "ОК" ........ .... так как сравнить http-ответ со строкой ........... пожалуйста, дайте свои предложения ... спасибо.

Вот мой кусок кода ......

- (IBAction) submitPINAction: (id) отправитель { printf («внутри отправить 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");
}

}

- (недействительное) соединение: (NSURLConnection *) theConnection didReceiveData: (NSData *) incrementalData { printf («данные получены»); if (mydata == nil) { mydata = [[NSMutableData alloc] initWithCapacity: 2048]; } [mydata appendData: incrementalData]; NSString * temp = [[NSString alloc] initWithData: кодировка mydata: 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];
}

}


Ответы [ 3 ]

5 голосов
/ 02 мая 2009

Я бы использовал следующую строку, чтобы увидеть, что ответ на самом деле является строкой 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]];
} 
0 голосов
/ 04 мая 2009

Спасибо, Коррос и Дэнвин, что помогли мне. Проблема действительно была с пробелами. Я обрезал пробелы, как ты сказал, и это сработало.

и спасибо stackoverflow.com. Это действительно отличный форум. Я нахожу полезные приложения для всех тем, связанных с iPhone, и в то же время он также помогает и другой платформе.

0 голосов
/ 02 мая 2009

Ещё я бы хотел убедиться, что вы получили все данные, прежде чем проверять строку. Похоже, что вы делаете проверку строки в didReceiveData, но может иметь смысл сделать проверку в connectionDidFinishLoading после завершения данных.

...