2016-07-30 67 views
0

我需要删除api中的一些项目。我将AFNetworking 2.3.4版本用于api请求,响应。在这里,我使用DELETE方法删除api项目,当我调用这个api时,它成功删除了这些项目,但是它会抛出错误“Data is nil”。为什么它抛出这个错误我不确切地知道。删除ios中的api值为“数据为零”值

这里是我的API代码删除方法:

//使用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

“抛出错误”?如在例外情况下还是仅仅打印消息? – Droppy

回答

1

没有什么不对的API,什么是错的是你的代码的期望删除API与访问令牌。

您要求API删除资源。那么对你的期望是什么样的回应?状态200和一些数据?当然不是。你只是删除了资源。它不在那里。

看到这个答案:HTTP status code for update and delete?

摘要:你会接受状态200,说明没有任何数据的删除操作成功,或状态204的数据,为已经成功地删除数据。 (有些人也会接受202,这基本上意味着服务器在说“我听说过你,我会删除它”)。