iOS Convert NSData to NSDictionary returns nil?

心不动则不痛 提交于 2019-12-25 02:29:11

问题


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.

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.

"{\"multicast_id\":8856529321585625357,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1534479035021563%1dbdaa031dbdaa03\"}]}"


回答1:


Pass NSData object(data) directly to JSONObjectWithData. Also, to check the error, you can print jsonError.




回答2:


Try the following code:

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

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



回答3:


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;
}


来源:https://stackoverflow.com/questions/51889036/ios-convert-nsdata-to-nsdictionary-returns-nil

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!