/ / Az NSURLSession befejező kezelőjének kezelése egy egyéni osztályból - ios, object-c, iphone, nsurlsession, befejező kezelő

Az NSURLSession befejezési kezelőjének kezelése az egyéni osztályból - ios, objective-c, iphone, nsurlsession, completionhandler

Alkalmazásom egy része bejelentkezési csekk létrehozásával foglalkozika felhasználó számára egy egyedi kód alapján. Annak érdekében, hogy az alkalmazásom megfelelően strukturált legyen, létrehoztam egy hálózati Helper osztályt, hogy kezelhessem az összes hálózati műveletet. Itt "Hogyan hívom a helper osztályomat a vezérlőosztályból (ViewController.m).

[[LoginNetworkHelper alloc] loginBasedOnPatientId:@"abc"];

A LoginNetworkHelper osztályom a következő feladatokat látja el: (LoginNetworkhelper.m)

- (BOOL)loginBasedOnPatientId:(NSString *)patientId
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://test.php"]];
[request setHTTPMethod:@"POST"];

//creating json string to send to server
NSDictionary *patientData = [NSDictionary dictionaryWithObjectsAndKeys:@"002688727",@"value",@"prem_key_id",@"name", nil];
NSMutableArray *dataArr = [[NSMutableArray alloc] init];
[dataArr addObject:patientData];
NSError *error;
NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:dataArr options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
NSString *postData = [NSString stringWithFormat:@"message=%@",jsonString];

[request setHTTPBody:[postData dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]];
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"%@",json);
}];
[dataTask resume];
return TRUE;
}

Tehát az én alapvető kérdésem az, hogy hogyan tudok kommunikálni a befejező kezelőm között NSURLSession és az én vezérlőosztályom, amely az éna bejelentkezés megtekintése. Meg kell változtatnom valamit a fő nézetben a szerverről visszaadott adatok alapján, amely csak az aszinkron futó befejező kezelőtől érhető el. Van-e jobb mód az összes hálózati feladat kezelésére, ugyanakkor képesek legyenek hivatkozni a fő vezérlő objektumaira, ahonnan hívják őket. Előre is köszönöm

válaszok:

3 a válasz № 1

A kommunikáció eléréséhez jegyzőkönyvet kell hozzáadni a LoginNetworkHelper.h osztályhoz.

@protocol LoginNetworkHelperResponseDelegate <NSObject>
@required
-(void)didFininshRequestWithJson:(NSDictionary *)responseJson;
@end

Adja hozzá a küldött változót a LoginNetworkHelper.h osztályához

@property (nonatomic,strong) NSObject < LoginNetworkHelperResponseDelegate > *delegate;

Most adja hozzá a következő kódot a befejezéshez.

NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
//Code Added Start
[self.delegate didFininshRequestWithJson:json];
//Code Added Ends
NSLog(@"%@",json);
}];

Most a ViewController.h-ben csak megfeleljen a protokollnak

@inteface ViewController:UIViewController<LoginNetworkHelperResponseDelegate>
…
@end

Végezze el a protokollt. A módszer nem aFelszerkesztésWithJson: válaszJson a ViewControllerben

-(void)didFininshRequestWithJson:(NSDictionary *)responseJson
{
//Process the responseJson;
}

Most csak hajtsa végre a következő kódot a LoginRequest kezdeményezéséhez.

LoginNetworkHelper *loginNetHelper = [[LoginNetworkHelper alloc]init];
loginNetHelper.delegate = self;
[loginNetHelper loginBasedOnPatientId:@"abc"];

Amint a Befejezéskezelő meghívásra kerül, a küldött módszert a json választ kapja meg. Ezt az értesítéssel is elérhetjük.

Hadd tudjam meg, ha bármilyen probléma merül fel.

Üdvözlettel,

Amit


Kapcsolódó kérdések


Hozzászólások (0)

Hozzászólni