Tutorial :How do I serialize an object to file using NSKeyedArchiver in NSPropertyListXMLFormat_v1_0 format?



Question:

Hopefully that title is clear enough. Anyways, it seems:

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];  

is restricted to NSPropertyListBinaryFormat_v1_0.

I need the format to be human readable [so xml]. If you're interested, this is part of project I'll eventually put up on github with a blog post about "How to Unit Test GPS Applications"

:-)


Solution:1

You have to use NSPropertyListSerialization to convert it. Basically, assuming the object that you're serializing is called myObject and the ultimate file is stored in myPath, you would serialize it to XML using something like the following code fragment:

NSString *error = nil;  NSData *mySerializedObject = [NSKeyedArchiver archivedDataWithRootObject:myObject];  NSData *xmlData = [NSPropertyListSerialization dataFromPropertyList:mySerializedObject                          format:NSPropertyListXMLFormat_v1_0                          errorDescription:&error]:  if( xmlData ) {      [xmlData writeToFile:myPath atomically:YES];  } else {      NSLog(error);      [error release];  }  


Solution:2

Instead of using the class method, try creating an instance of NSKeyedArchiver and using setOutputFormat:NSPropertyListXMLFormat_v1_0 to specify XML format. The only downside is it'll take a few extra lines of code since to actually handle the serialization, it won't just return an NSData object in one step.


Solution:3

You will have to encode the object class by using method -(void) encodeWithCoder(NSCoder *)encoder {

[coder encodeObject:name forKey:@"name"];  [coder encodeObject:address forKey:@"address"];  [coder encodeObject:position forKey:@"position"];  

}


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »