setClass :forClassName:
Adds a class translation mapping to the receiver whereby objects encoded with a given class name are decoded as instances of a given class instead.
Parameters of [NSKeyedUnarchiver setClass]
- cls
- The class with which to replace instances of the class named codedName.
- codedName
- The ostensible name of a class in an archive.
Discussion
When decoding, the receiver’s translation map overrides any translation that may also be present in the class’s map (see setClass:forClassName:).
Example of [NSKeyedUnarchiver setClass]
MyViewController *controller = [[[MyViewController alloc] init] autorelease];
NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:[NSKeyedArchiver archivedDataWithRootObject:controller]] autorelease];
[unarchiver setClass:[MyNavigationBar class] forClassName:@"UINavigationBar"];
controller = [unarchiver decodeObjectForKey:@"root"];
Example of [NSKeyedUnarchiver setClass]
UIViewController *tempController = [[[UIViewController alloc] init] autorelease];
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:tempController] autorelease];
NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:navigationController];
NSKeyedUnarchiver *unarchiver = [[[NSKeyedUnarchiver alloc] initForReadingWithData:archive] autorelease];
[unarchiver setClass:[CustomNavigationBar class] forClassName:@"UINavigationBar"];
UINavigationController *customNavigationController = [unarchiver decodeObjectForKey:@"root"];
UIViewController *contentController = [[[ContentViewController alloc] init] autorelease];
customNavigationController.viewControllers = [NSArray arrayWithObject:contentController];