Table of Contents Previous Section

Archiving Custom Objects in Other Applications

Custom classes that can't take advantage of an EOEditingContext for archiving must take a different approach. These classes still must conform to the NSCoding protocol and implement its encodeWithCoder: and initWithCoder: methods; however, you must implement them differently. In encodeWithCoder:, you use the coder argument provided to encode the object's instance variables. In initWithCoder:, the object uses the decoder provided to initialize itself.

You can see implementations of encodeWithCoder: and initWithCoder: in the DodgeDemo application, in the class ShoppingCart.

	- encodeWithCoder:(NSCoder *)coder {
		[coder encodeObject:carID];
		[coder encodeObject:colorID];
		[coder encodeObject:colorPicture];
		[coder encodeObject:packagesIDs];
		[coder encodeObject:downPayment];
		[coder encodeObject:leaseTerm];
	}

	- initWithCoder:(NSCoder *)coder {
		self = [super init];
		carID = [[coder decodeObject] retain];
		colorID = [[coder decodeObject] retain];
		colorPicture = [[coder decodeObject] retain];
		packagesIDs = [[coder decodeObject] retain];
		downPayment = [[coder decodeObject] retain];
		leaseTerm = [[coder decodeObject] retain];
		car = nil;
		return self;
	}
The Java version of DodgeDemo's ShoppingCart implements these methods instead:

	public void encodeWithCoder(Coder coder) {
		coder.encodeObject(leaseTerm);
		coder.encodeObject(downPayment);
		// DodgeDemoJava defines a custom Car object that contains all
		// info about the car.
		coder.encodeObject(car);
	}

	public ShoppingCart(Coder coder) {
		super();
		leaseTerm = coder.decodeObject();
		downPayment = coder.decodeObject();
		Car aCar = (Car)coder.decodeObject();
		setCar(aCar);
	}
For more information on archiving, see the class specifications for NSCoding, NSCoder, NSArchiver, and NSUnarchiver in the Foundation Framework Reference.

Table of Contents Next Section