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