"Data is Nil" 中的值删除 ios 中的 api 值
"Data is Nil" value from delete the api values in ios
我需要删除 api 中的一些项目。我使用 AFNetworking 2.3.4 版本进行 api 请求、响应。在这里,我使用 DELETE 方法删除 api 项,当我调用此 api 时,它成功删除了项,但抛出错误 "Data is nil"。为什么它抛出这个错误我不完全知道。
这是我的 API 删除方法代码:
// 删除 API with Access Token using 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);
}];
API没有错,错的是你对代码的期望。
您要求 API 删除资源。那么你期待什么样的回应呢?状态 200 和一些数据?当然不是。您刚刚 删除了资源。它不在那里。
看到这个答案:
总结:您应该期待并接受状态 200 的数据描述删除操作成功,或状态 204 没有任何数据,作为已成功删除数据。 (有些人也会接受 202,这基本上意味着服务器在说 "I heard you, I'm going to delete it")。
我需要删除 api 中的一些项目。我使用 AFNetworking 2.3.4 版本进行 api 请求、响应。在这里,我使用 DELETE 方法删除 api 项,当我调用此 api 时,它成功删除了项,但抛出错误 "Data is nil"。为什么它抛出这个错误我不完全知道。
这是我的 API 删除方法代码:
// 删除 API with Access Token using 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);
}];
API没有错,错的是你对代码的期望。
您要求 API 删除资源。那么你期待什么样的回应呢?状态 200 和一些数据?当然不是。您刚刚 删除了资源。它不在那里。
看到这个答案:
总结:您应该期待并接受状态 200 的数据描述删除操作成功,或状态 204 没有任何数据,作为已成功删除数据。 (有些人也会接受 202,这基本上意味着服务器在说 "I heard you, I'm going to delete it")。