2013-08-28 29 views
0

我在處理註冊表單,我需要使用安全的POST請求。在JSON響應之前sendSynchronousRequest註冊用戶

如果我只是使用NSJSONSerialization與變量data,它的效果很好。沒有錯誤。

的問題是,當我致電sendSynchronousRequest和嘗試調用NSJSONSerialization的變量secureData,在registrationError說:「與該電子郵件已經存在的用戶」。

我該如何避免這種情況?

這裏是我的代碼:

NSData *data = [NSData dataWithContentsOfURL:registrationURL]; 

NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:registrationURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30]; 

[postRequest setHTTPMethod:@"POST"]; 
[postRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[postRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[postRequest setValue:[NSString stringWithFormat:@"%d", data.length] forHTTPHeaderField:@"Content-Length"]; 
[postRequest setHTTPBody:data]; 

NSURLResponse *response; 
NSError *error; 
NSData *secureData = [NSURLConnection sendSynchronousRequest:postRequest returningResponse:&response error:&error]; 

NSLog (@"%@", error); 

if (secureData != nil) 
{ 
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:secureData options:kNilOptions error:&error]; 
    NSString *registrationError = [json objectForKey:@"error"]; 

    NSLog(@"%@", registrationError); 
} 

編輯:這裏有沒有職位,沒有工作的代碼:

NSData *data = [NSData dataWithContentsOfURL:registrationURL]; 

if (data != nil) 
{ 
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 
    NSString *registrationError = [json objectForKey:@"error"]; 

    NSLog(@"%@", registrationError); 
} 

回答

0

這是從正在使用的服務器的錯誤消息。當您使用相同的電子郵件地址進行兩次測試時,用戶在第一次運行中註冊並在以下嘗試中已存在。

+0

我意識到這一點。我每次都測試一個不同的電子郵件地址。問題是'sendSynchronousRequest'。 @eik –

+0

你得到一個完美的有效的JSON對象,所以NSURLConnection不是culprint。 OTOH對我來說「使用該電子郵件的用戶已經存在」聽起來很像服務器消息。 – eik

+0

這是正確的。當我在沒有安全POST的情況下注冊電子郵件時,我沒有收到服務器消息。當我使用安全POST進行註冊時,我總是收到服務器消息;不管我用什麼郵件。 - @eik –