ios - "Data is Nil"值来自删除 ios 中的 api 值

标签 ios objective-c afnetworking

我需要删除 api 中的一些项目。我使用 AFNetworking 2.3.4 版本进行 api 请求、响应。在这里,我使用 DELETE 方法删除 api 项目,当我调用此 api 时,它成功删除了项目,但它抛出错误“数据为零”。为什么它抛出这个错误我不完全知道。

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

//使用 Arraylist 删除带有访问 token 的 API

           +(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 和一些数据?当然不是。您刚刚删除了该资源。它不在那里。

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

摘要:您应该预期并接受状态 200,其中包含描述删除操作成功的数据,或者状态 204,其中没有任何数据,因为已成功删除数据。 (有些人也会接受 202,这基本上意味着服务器在说“我听到了,我要删除它”)。

关于ios - "Data is Nil"值来自删除 ios 中的 api 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38673229/

相关文章:

objective-c - 查找 NSString 的宽度作为 CGFloat

ios - 无法在iOS应用程序中使用AFNetworking

ios - Tableview 重新加载不调用 afnetworking 成功 block 中的委托(delegate)方法?

ios - NSURLSession:后台上传然后调用服务api

ios - 保存/恢复自动续订收据,不重复

ios - 如何在新的 iTunes Connect 中更改包 ID

iphone - 这段代码有什么错误?

ios - 返回 PKRevealController 时丢失左侧菜单

ios - Swift:将pdf文件读入pdf应用程序阅读器

ios - Testflight 应用程序需要 iOS 8。我们如何使用 iOS 7 进行 Beta 测试?