2017-08-06 6 views
0

Quelle est la meilleure façon de convertir NSURLConnection en NSURLSession?De NSURLConnection à NSURLSession

message d'erreur: (Xcode)

ViewController.m: 342: 45: 'stringByAddingPercentEscapesUsingEncoding:' est obsolète: première obsolète dans iOS 9.0 - Utilisez -stringByAddingPercentEncodingWithAllowedCharacters: à la place, qui utilise toujours recommandé UTF 8 codage, et qui code pour un composant ou un sous-composant d'URL spécifique puisque chaque composant ou sous-composant d'URL a des règles différentes pour les caractères valides.

mon code:

-(void)downloadZip 
{ 
    NSLog(@"Start Downloading Zip File"); 

    NSDate *myDate = (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"LastUpdate"]; 


    NSString *path = [NSString stringWithFormat:phpLinkgetZip, myDate]; 

    NSURL *url = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

    NSLog(@"Checking update at Zip File : %@", path); 
    NSLog(@"Checking update Time : %@", myDate); 


    responseData = [[NSMutableData alloc] init]; 


    NSURLRequest* updateRequest = [NSURLRequest requestWithURL: url]; 

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

    NSLog(@"Zip Downloading start..."); 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    [responseData setLength:0]; 
    filesize = [[NSNumber numberWithLong: [response expectedContentLength] ] retain]; 

} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [self updateZipDownloaded]; 
    [filesize release]; 
    [connection release]; 

} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [responseData appendData:data]; 
    NSNumber* curLength = [NSNumber numberWithLong:[responseData length] ]; 
    float progress = [curLength floatValue]/[filesize floatValue] ; 


} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"Zip Downloading error"); 

} 
+1

@phl_Austria cela pourrait aider vous-: https://www.objc.io/issues/5-ios7/from-nsurlconnection-to-nsurlsession/ –

+0

Afficher le code de la méthode updateZipDownloaded. – user3182143

+0

Vérifiez ma réponse.Il vous aide. – user3182143

Répondre

1

Si vous voulez surmonter l'erreur ci-dessus s'il vous plaît utiliser ci-dessous le code

NSCharacterSet *setPath = [NSCharacterSet URLPathAllowedCharacterSet]; 
NSString *strURL = [path stringByAddingPercentEncodingWithAllowedCharacters:setPath]; 

stringByAddingPercentEncodingWithAllowedCharacters:

Renvoie une nouvelle chaîne faite à partir du récepteur par remplaçant tous les caractères ne se trouvant pas dans la ensemble spécifié avec des caractères codés en pourcentage.

caractères transmis à définir ci-après les méthodes

  • (NSCharacterSet *) URLUserAllowedCharacterSet;
  • (NSCharacterSet *) URLPasswordAllowedCharacterSet;
  • (NSCharacterSet *) URLHostAllowedCharacterSet;
  • (NSCharacterSet *) URLPathAllowedCharacterSet;
  • (NSCharacterSet *) URLQueryAllowedCharacterSet;
  • (NSCharacterSet *) URLFragmentAllowedCharacterSet;

Si vous voulez aller NSURLSession de NSURLConnetion, faire les choses suivantes

NSURL *URL = [NSURL URLWithString:@"http://example.com"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:URL]; 

NSURLSession *session = [NSURLSession sharedSession]; 
NSURLSessionDataTask *task = [session dataTaskWithRequest:request 
            completionHandler: 
^(NSData *data, NSURLResponse *response, NSError *error) { 
    // ... 
}]; 

[task resume]; 

NSURLSession de classe et les classes connexes fournissent une API pour le téléchargement de contenu via HTTP. Cette API fournit un ensemble complet de méthodes déléguées pour la prise en charge de l'authentification et permet à votre application d'effectuer des téléchargements en arrière-plan lorsque votre application n'est pas en cours d'exécution ou, dans iOS, lorsque votre application est suspendue. Pour utiliser l'API NSURLSession, votre application crée une série de sessions, , chacune coordonnant un groupe de tâches de transfert de données connexes. Par exemple, si vous écrivez un navigateur Web, votre application peut créer une session par onglet ou fenêtre. Au sein de chaque session, votre application ajoute une série de tâches , chacune représentant une demande d'URL spécifique (et pour toutes les URL de suivi si l'URL d'origine renvoyait une redirection HTTP).

Comme la plupart des API de réseau, l'API NSURLSession est hautement asynchrone ( ).Si vous utilisez le délégué par défaut fourni par le système, doit fournir un bloc de gestionnaire d'achèvement qui renvoie des données à votre application lorsqu'un transfert se termine avec succès ou avec une erreur. Alternativement, si vous fournissez vos propres objets délégués personnalisés, les objets de tâche appellent les méthodes de ces délégués avec les données telles qu'elles sont reçues du serveur (ou, pour les téléchargements de fichiers, lorsque le transfert est terminé).