简体   繁体   中英

Cannot encode the data in ios

Cannot encode the data in ios which fetch from webservice.

- (NSData*)encodeDictionary:(NSDictionary*)dictionary {
    NSMutableArray *parts = [[NSMutableArray alloc] init];
    for (NSString *key in dictionary) {
        NSString *encodedValue = [[NSString stringWithFormat:@"%@",[dictionary objectForKey:key]] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *encodedKey = [[NSString stringWithFormat:@"%@",key] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *part = [NSString stringWithFormat: @"%@=%@", encodedKey, encodedValue];
        [parts addObject:part];
    }
    NSString *encodedDictionary = [parts componentsJoinedByString:@"&"];
    return [encodedDictionary dataUsingEncoding:NSUTF8StringEncoding];
}

It seems you are encoding NSDictionary and generate a NSString. And again Encoding that NSString and returns it.

You may do it in easy way as below.

NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionaryOrArrayToOutput 
                    options:NSJSONWritingPrettyPrinted 
                    error:&error];

if (! jsonData) {
    NSLog(@"Got an error: %@", error);
} else {
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}

You may return above jsonData in your function to achieve your requirement as below.

- (NSData*)encodeDictionary:(NSDictionary*)dictionary {
    NSError *error; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary 
                    options:NSJSONWritingPrettyPrinted 
                    error:&error];
    if (! jsonData) {
      NSLog(@"Got an error: %@", error);
    } else {
      return jsonData;
  } 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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