简体   繁体   English

iOS将NSData转换为NSDictionary返回nil?

[英]iOS Convert NSData to NSDictionary returns nil?

In My code I want to convert NSData to NSDictionary but it returns nil I don't know what mistake I made,I Used NSJSONSerialization for convert data to dictionary, The NSData was received from server response. 在我的代码中,我想将NSData转换为NSDictionary,但返回nil我不知道我犯了什么错误,我使用NSJSONSerialization将数据转换为字典,从服务器响应接收到NSData。

Here I show my Full code what I am trying. 在这里,我显示我的完整代码我正在尝试什么。

-(void)SendPushNotification:(NSString*)getUrl :(NSMutableDictionary *)getData withCompletionBlock:(void(^)(NSDictionary *))completionBlock
{
    NSError *error;

NSLog(@"dict val: %@",getData);
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:getData options:NSJSONWritingPrettyPrinted error:&error];// Pass 0 if you don't care about the readability of the generated string
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSData *postData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

NSString *postLengthas = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:getUrl]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100.0];

NSString *chkRegDevice= [[NSUserDefaults standardUserDefaults] stringForKey:@"bearer"];
NSString *strfds=[NSString stringWithFormat:@"bearer %@",chkRegDevice];
[request setHTTPMethod:@"POST"];
[request setValue:postLengthas forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:strfds forHTTPHeaderField:@"Authorization"];
[request setHTTPBody:postData];

NSURLSessionConfiguration *configg=[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession*sessionn=[NSURLSession sessionWithConfiguration:configg delegate:nil delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *taskk=[sessionn dataTaskWithRequest:request completionHandler:^(NSData *data,NSURLResponse *responce,NSError *error){
    if(error)
    {
        NSLog(@"%@", [error localizedDescription]);
        completionBlock(nil);
    }else{
        NSError *jsonError;
        NSString *clientDetail = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        NSLog(@"clientDetail: %@", clientDetail);
        NSData *objectDataaaaa = [clientDetail dataUsingEncoding:NSUTF8StringEncoding];
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectDataaaaa options:NSJSONReadingMutableContainers error:&jsonError];
        NSLog(@"json %@",json);
        if (![clientDetail isEqualToString:@"Object reference not set to an instance of an object."]) {
            if (completionBlock) {
                completionBlock(json);
            }
        }
        else
        {
            completionBlock(nil);
        }
     }
  }];
 [taskk resume];
}

Here the following response I get to convert NSData to NSString. 在这里,我得到以下响应,将NSData转换为NSString。

"{\\"multicast_id\\":8856529321585625357,\\"success\\":1,\\"failure\\":0,\\"canonical_ids\\":0,\\"results\\":[{\\"message_id\\":\\"0:1534479035021563%1dbdaa031dbdaa03\\"}]}" “{\\” multicast_id \\ “:8856529321585625357,\\” 成功\\ “:1,\\” 失败\\ “:0,\\” canonical_ids \\ “:0,\\” 结果\\ “:[{\\” MESSAGE_ID \\ “:\\” 0:1534479035021563%1dbdaa031dbdaa03 \\ “}]}”

Pass NSData object( data ) directly to JSONObjectWithData . 将NSData对象( data )直接传递到JSONObjectWithData Also, to check the error, you can print jsonError . 另外,要检查错误,可以打印jsonError

Try this. 尝试这个。

NSString* str = your string data;
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *decodeString = [[NSString alloc] initWithData:data 
   encoding:NSASCIIStringEncoding];

NSDictionary *dict = [self dictionaryWithJsonString:decodeString];

/////////////////////

- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
    if (jsonString == nil) {
        return nil;
    }

    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *err;
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData

    options:NSJSONReadingMutableContainers
                                                      error:&err];
    if(err) {
        return nil;
    }
    return dic;
}

Try the following code: 尝试以下代码:

NSError* error;
NSData *objectDataaaaa = [clientDetail dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:objectDataaaaa
                                                 options:kNilOptions 
                                                   error:&error];
NSLog(@"JSON DICT: %@", json);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM