2013-11-22 66 views
1

嗨,大家好:d請向我解釋,我應該如何在類NSDictionary中使用(在此page)。什麼我應該說request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding]; that my program work correctly?POST請求用的NSDictionary

這是我的代碼

#import "MainClass.h" 

@implementation MainClass 

- (IBAction)actionButton:(id)sender { 

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL 
                    URLWithString:@"https://login.dnevnik.ru"] 
                 cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0]; 


request.HTTPMethod = @"POST"; 
NSString *username = _loginLogin.text; 
NSString *password= _passwordLogin.text; 
GlobalUserName = username; 
GlobalPassword = password; 
NSDictionary *param = @{@"Username": GlobalUserName,@"password": GlobalPassword}; 



/*NSUserDefaults *loginData = [NSUserDefaults standardUserDefaults]; 
NSString *username1 = [loginData objectForKey:@"username"] ; 
NSString *password1 = [loginData objectForKey:@"password"];*/ 


//Параметры посылаемого запроса 
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding]; 
[request setValue:@"application/x-www-form-urlencoded;charset=UTF-8" 
forHTTPHeaderField:@"Content-Type"]; 


NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 


if (connection) { 
    _otvet.text = @"Соединение установлено"; 
    NSLog(@"ama ama"); 

} 
else 
{ 
    [email protected]"Проблема с соединением"; 
    NSLog(@"ama ama faza"); 
} 

} 

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse 
*)response  
{ 
[receivedData setLength:0]; 

} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 

[receivedData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
UIAlertView *errorAlert = [[UIAlertView alloc] 
          initWithTitle:@"Ошибка" message:@"Пожалуйста, проверьте 
соединение с Интернетом." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
[errorAlert show];   
} 


- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

NSString * data = [[NSString alloc] initWithData:receivedData  
encoding:NSUTF8StringEncoding]; 

if ([data isEqualToString: @"OK"]) { 

    _otvet.text = @"Вы успешно залогинены."; 
    NSLog(@"Вы успешно залогинены."); 
} 
else 
{ 
    NSLog(@"Ошибка авторизации %@,%@",GlobalUserName,GlobalPassword); 
} 
} 

在我case xcode編譯時說

No visible @interface for 'NSDictionary' declares the selector 'dataUsingEncoding:'

+1

我知道這是舊。但希望你能迴應。你在你的Mainclass.h中定義了GlobalUserName和GlobalPassword是什麼? – paintball247

回答

2

你應該通過NSString作爲一個BODY。

這樣做:

NSString *postString = [NSString stringWithFormat:@"Username=%@&password=%@",username,password]; 
request.HTTPBody = [postString dataUsingEncoding:NSUTF8StringEncoding]; 

或者,如果你想編碼的NSDictionary以JSON字符串,並將其在後端解碼 - 更好的方式來做到這一點,但更多的工作:)

request.HTTPBody = [NSJSONSerialization dataWithJSONObject:param options:NSJSONWritingPrettyPrinted error:&error] 
+0

超好用的答案謝謝! – Fattie

+0

應該如在..不能通過nsdictionary?因爲我有一個問題通過NSDictionary傳遞到PHP腳本... NSString的工作,但不是NSDictionary – jsetting32

+0

你可以,只需使用:request.HTTPBody = [NSJSONSerialization dataWithJSONObject:字典選項:NSJSONWritingPrettyPrinted錯誤:無] –