/ / параметърът на данните е нула, когато се опитвам да извлека данните от уеб услугата чрез json - objective-c

параметърът на данните е нулев, когато се опитвам да извлека данните от уеб услугата, използвайки json - objective-c

- (NSDictionary*)PostWebService:(NSString*)completeURL param:(NSString*)value
{
@try
{
NSString *urlStr =[completeURL  stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
//NSString *urlPart=@"req=value";
//NSString *urlPart;
NSString *urlPart=[NSString stringWithFormat:@"req=%@", value];

NSLog(@"String %@",urlPart);
NSData *requestBody = [urlPart dataUsingEncoding:NSUTF8StringEncoding];
//NSLog(@"String %@",requestBody);
[request setHTTPBody:requestBody];
NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request  returningResponse:&response error:&requestError];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
NSLog(@"String %@",responseString);
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions
error:&error];

return json;
}

@catch(NSException *e)
{
NSLog(@"reason is%@",e.reason);
}
}

и аз наричам този метод тук ..

-(NSDictionary*)gotvall:(NSString*)req
{
@try
{
NSString *vurl=@"some url/";

//   vurl=[vurl stringByAppendingString:@"req="];
// vurl=[vurl stringByAppendingString:req];
//  NSLog(@"%@",vurl);
NSDictionary *json=[self PostWebService:vurl param:req];
NSLog(@"json is%@",json);
return json;
}
@catch(NSException *e)
{
NSLog(@"%@",e.reason);
}
}

След отстраняване на грешки от този метод получих резултат като параметър на данните nil, Може ли някой да каже, че това, което правя тук е грешно. Получих пълния URL адрес и когато пусна този URL адрес в браузъра, получих отличните данни, но когато печатам стойността на json, тя се връща null.

Отговори:

2 за отговор № 1

Съобщихте, че грешката ви е:

Грешка в домейна = NSURLErrorDomain Code = -1002"неподдържан URL" UserInfo = 0x8d84960 {NSErrorFailingURLStringKey =% 20http: //www.hugosys.in/www.nett-torg.no/api/vehicl e /, NSErrorFailingURLKey =% 20http: //www.hugosys.in/www .nett-torg.no / api / vehicle /, NSLocalizedDescription = неподдържан URL адрес, NSUnderlyingError = 0x8d8bfe0 "неподдържан URL адрес"}

Че %20 в съобщението ви за грешка е интервал в началото на вашия URL адрес stringByAddingPercentEscapesUsingEncoding повикването е превърнато в %20, Ако премахнете това допълнително пространство, трябва да сте в добра форма.

Няколко други наблюдения:

  1. Просто да ви предупредя, вашето използване stringByAddingPercentEscapesUsingEncoding ще се справи правилно с наличието на интервал в req стойност. Но няма да се справи добре с присъствието на някои други знаци (особено & или +). Ако е възможно тези символи да се показват в req стойност, може да искате да премахнете повикването до stringByAddingPercentEscapesUsingEncoding за целия URL адрес, а вместо това просто използвайте CFURLCreateStringByAddingPercentEscapes (което ви дава малко повече контрол над процентния процес на бягство) само на req стойност. Вижте percentEscapeString метод в този отговор: Добавете данни към POST NSURLRequest.

  2. Както в заявката ви за мрежа, така и в процеса на синхронизиране с JSON, вие се връщате NSError обект. Може да ви предложа да регистрирате тези стойности, ако те "nil, което ще ви помогне да диагностицирате проблемите в бъдеще.

  3. Забелязвам, че използвате обработката на изключения. Това не е обичайно в Цел-С Програмиране в Цел-С ръководството казва:

    Справяне с грешки

    Почти всяко приложение среща грешки. Някои от тези грешки ще бъдат извън вашия контрол, като например изчерпване на дисково пространство или загуба на мрежова връзка. Някои от тези грешки ще бъдат възстановими, като например невалиден потребителски вход. И докато всички разработчици се стремят към съвършенство, може да се случи и случайната програмна грешка.

    Ако идвате от други платформи иезици, може да сте свикнали да работите с изключения за по-голямата част от обработката на грешки. Когато пишете код с Objective-C, изключенията се използват единствено за грешки на програмист, като например достъпа до масив или невалидните методи. Това са проблемите, които трябва да намерите и поправите по време на тестването, преди да изпратите приложението си.

    Всички други грешки са представени от копия на NSError клас. Тази глава дава кратко въведение към използването NSError обекти, включително как да работите с рамкови методи, които може да не успеят и да върнат грешки. За повече информация вижте Ръководство за програмиране при работа с грешки.

    Най-долу, както споменах във втората точка, трябва да проверявате NSError връщайте себе си, вместо да разчитате на изключения в Цел-С.