2016-07-30 15 views
0

Ich muss einige Elemente in der API löschen. Ich benutzte die Version AFNetworking 2.3.4 für API-Anfrage, Antwort. Hier habe ich die DELETE-Methode zum Löschen der API-Elemente verwendet, wenn ich diese API aufruft, lösche ich die Elemente erfolgreich, aber es löst den Fehler "Daten ist Null" aus. Warum es diesen Fehler wirft, weiß ich nicht genau."Daten ist Nil" Wert von löschen die API-Werte in ios

Hier ist mein Code für API-Methode löschen:

// Löschen API mit Access Token mit Arraylist

  +(void)DeleteDataFromApiWithAccessToken:(NSString *)url withParameters:(NSDictionary *)parameters accessTokenValue:(NSString *)tokenValue returnBlock:(arrayList)block 
     { 
       NSLog(@"loadDataFromApi withParameters :: url %@, params %@",url,parameters); 


AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer]; 

[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 

[serializer setValue:tokenValue forHTTPHeaderField:ACCESSTOKEN_HEADER_FIELD]; 
[serializer setValue:FF_API_HEADER_VALUE forHTTPHeaderField:FF_API_HEADER_FIELD]; 

//serializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil]; 

manager.requestSerializer.timeoutInterval = 0.7; 
manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData; 

manager.requestSerializer = serializer; 

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

// Check the Network Connection 
if(![CommonClassApp checkForNetwork]) { 
    [CommonClassApp customAlert:ERR_MSG_NETWORK_PROBLEM]; 
    if (block) block(NULL); 
}else { 
    [manager DELETE:url parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
    { 
     NSLog(@"RESPONSE STATUS CODE: %ld", [responseObject statusCode]); 
     if (responseObject != NULL) 
     { 
      NSError *error = nil; 

      NSMutableArray *responseJsonData = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:&error]; 

      NSLog(@"responseJsonData - %@",responseJsonData); 
      if (block) block(responseJsonData); 
     }else{ 
      [CommonClassApp customAlert:ERR_MSG_INVALID_RESPONSE]; 
      if (block) block(NULL); 
     } 

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 


     NSLog(@"failure ::: %ld",(long)[operation.response statusCode]); 
     NSDictionary *responseJsonData = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:NSJSONReadingAllowFragments error:&error]; 
     if ([operation.response statusCode] == 401) { 
      if (responseJsonData.count>0) { 
       NSString *userError = [responseJsonData valueForKey:@"code"]; 
       [CommonClassApp customAlert:[ERROR_AUTH_ERROR valueForKey:userError]]; 
      } 
     } 
     else 
     { 
      NSString *userError = [responseJsonData valueForKey:@"message"]; 
      NSLog(@"Error Message: %@",userError); 
      [CommonClassApp customAlert:userError]; 
     } 

     if (block) block(NULL); 
    }]; 
+0

"wirft den Fehler"? Wie in einer Ausnahme oder nur eine Nachricht drucken? – Droppy

Antwort

1

Es ist nichts falsch mit der API, was falsch die Erwartungen des Codes ist.

Sie haben die API aufgefordert, eine Ressource zu löschen. Welche Art von Antwort auf Sie erwarten? Status 200 und einige Daten? Natürlich nicht. Sie nur löschte die Ressource. Es ist nicht da.

Siehe diese Antwort: HTTP status code for update and delete?

Zusammenfassung: Sie sollten beschreiben Status 200 mit Daten erwarten und akzeptieren, dass der Löschvorgang erfolgreich war, oder Status 204 ohne Daten zu löschen, wie erfolgreich die Daten gelöscht zu haben. (Manche Leute akzeptieren auch 202, was im Grunde bedeutet, dass der Server sagt "Ich habe dich gehört, ich werde es löschen").