2014-01-19 2 views
2

Хорошо, я пытаюсь адаптироваться к объективу C, и это было для меня американское горки, так или иначе, я просто пытаюсь отправить простой почтовый запрос на сервер, однако это не выглядит так: простой, как это было для android. В настоящее время у меня есть следующий метод:Отправка запроса на отправку IOS 7

-(void)postMethod 
{ 

    [self.connection cancel]; 

    //initialize new mutable data 
    NSMutableData *data = [[NSMutableData alloc] init]; 
    self.receivedData = data; 

    //initialize url that is going to be fetched. 
    NSURL *url = [NSURL URLWithString:@"http://blank.com/register.php"]; 

    //initialize a request from url 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[url standardizedURL]]; 

    //set http method 
    [request setHTTPMethod:@"POST"]; 
    //initialize a post data 
    NSString *postData = @"username=postTest&displayname=testingPoster&password=postest&passwordc=postest&email=posttesting%40posttest.com&bio=I+am+tesring+the+post+test&skills=I+am+a+hacka&interests=hacing+and+cracking&skills_needed=some+php+skills&company=Post+testing+the+script&dob=naaaaaa&occupation=Qoekkk"; 
    //Here you can give your parameters value 

    //set request content type we MUST set this value. 

    [request setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 

    //set post data of request 
    [request setHTTPBody:[postData dataUsingEncoding:NSUTF8StringEncoding]]; 

    //initialize a connection from request 
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    self.connection = connection; 


    //start the connection 
    [connection start]; 
} 

и у меня есть кнопка для вызова функции:

- (IBAction)register:(id)sender { 

    [self postMethod]; 


} 

Я убедиться, что я включил NSURLConnectionDataDelegate в моем файле заголовка, однако, когда я пытаюсь отправить запрос, когда я нажимаю кнопку, он не проходит, и он просто останавливает программу, это не вызывает никаких ошибок. Любые предложения, я искал по сети, чтобы узнать, как отправить почтовый запрос, я не думаю, что это должно быть очень сложно.

И только упаковывают это важно, я использую последнюю версию iPhone SDK для IOS 7.

+1

Взгляните на [AFNetworking] (https://github.com/AFNetworking/AFNetworking). Упрощает это совсем немного;) – John

+0

Возможный дубликат [Простой пример HTTP-сообщения в Objective-C?] (Http://stackoverflow.com/questions/3566516/simple-http-post-example-in-objective-c) – codercat

ответ

1

AFNetworking проверено и испытано. - проверить пример ниже, который также использует базовую аутентификацию:

- (void)postToAPI { 

    NSURL *postURL = [NSURL URLWithString:@"http://yourdomain.com/api/operation"]; 

    AFHTTPClient* httpClient = [AFHTTPClient clientWithBaseURL:postURL]; 
    httpClient.parameterEncoding = AFJSONParameterEncoding; 
    [httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; 
    [httpClient setDefaultHeader:@"Accept" value:@"application/json"]; 

    // Set up authentication - Get username from keychain 
    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"bnmcred" accessGroup:nil]; 
    NSString *password = [keychainItem objectForKey:(__bridge id)kSecValueData]; 
    NSString *username = [keychainItem objectForKey:(__bridge id)kSecAttrAccount]; 

    [httpClient setAuthorizationHeaderWithUsername:username password:password]; 

    // Create Post Dictionary 
    NSMutableDictionary* postRequestDictionary = [[NSMutableDictionary alloc] init]; 
    postRequestDictionary[@"your_post_item_1"] = @"Hello"; 
    postRequestDictionary[@"your_post_item_2"] = @"World"; 

    // Create Request 
    NSMutableURLRequest* request = [httpClient requestWithMethod:@"POST" path:nil parameters:postRequestDictionary]; 

    self.httpOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     NSLog(@"Success"); 

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
     NSLog(@"Failure with error:%@", error); 
    }]; 

    [self.httpOperation start]; 
} 
3

Обратите внимание, что для прошивки 7 NSURLSession является рекомендуемым способом пойти. NSURLConnection, вероятно, будет устаревшим в будущих выпусках. Вы можете сделать свой запрос POST, используя один из трех типов: URL session tasks. NSURLSessionDataTask в значительной степени эквивалентен NSURLConnection. NSURLSessionUploadTask и NSURLSessionDownloadTask (который записывает полученные данные на диск) могут использоваться в фоновом сеансе и продолжать (в другом процессе), даже если ваше приложение приостанавливается или сбой. Подробнее можно прочитать в this guide.

Смежные вопросы