Search code examples
objective-ccocoansstringnsdatanskeyedarchiver

NSData from NSKeyedArchiver to NSString


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 string (I'm using three20 URL passing). I've gone through various encodings, UTF8, ASCII, etc. and can't get anything to work. NSKeyedArchiver says that the NSData is formated as a property list: NSPropertyListBinaryFormat_v1_0.

Does anyone have any idea how I can convert this NSData to a String and back again? Size of the string isn't an issue.

Thanks


Solution

  • 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