NSData from NSKeyedArchiver to NSString

前端 未结 3 1059
悲&欢浪女
悲&欢浪女 2021-02-08 20:20

I\'m trying to convert NSData generated from NSKeyedArchiver to an NSString so that I can pass it around and eventually convert it back to NSData. I have to pass this as a strin

相关标签:
3条回答
  • 2021-02-08 21:07

    What you want is:

    id<nscoding> obj;
    
    NSData * data     = [NSKeyedArchiver archivedDataWithRootObject:obj];
    NSString * string = [data base64EncodedString];
    

    And then the other way around

    NSString * string;
    
    NSData * data    = [NSData dataFromBase64String:string];
    id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data]
    

    You can add base64EncodedString and dataFromBase64String: with the NSData category available here NSData+Base64 but it is now included by default

    0 讨论(0)
  • 2021-02-08 21:12

    iOS 9.2.1, Xcode 7.2.1, ARC enabled

    base64EncodedString, dataFromBase64String: depreciated after iOS 7.0

    Updated solution:

    Encode to string:

    id<nscoding> obj;
    
    NSData *data     = [NSKeyedArchiver archivedDataWithRootObject:obj];
    NSString *string = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    

    Decode to data:

    NSString *string;
    
    NSData *data    = [[NSData alloc] initWithBase64EncodedString:string options:(NSDataBase64DecodingIgnoreUnknownCharacters)];
    id<nscoding> obj = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    

    Note: This is very useful when working with keychain to store a dictionary of key/value pairs into kSecValueData.

    Hope this helps someone! Cheers.

    0 讨论(0)
  • 2021-02-08 21:13

    All you should have to do is something like this:

    NSData *dataFromString = [[NSString stringWithFormat:@"%@", yourString] dataUsingEncoding:NSASCIIStringEncoding];
    

    then to extract the data:

    NSString *stringFromData = [[NSString alloc] initWithData:dataFromString encoding:NSASCIIStringEncoding];
    
    0 讨论(0)
提交回复
热议问题