要序列化,你只需要符合NSCoding
協議自定義對象。如果你的對象擴展NSObject的所有你需要做的(我認爲)是實現這些(例如對於人對象):
// Encode an object for an archive
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:name forKey:@「Name」];
[coder encodeInteger:age forKey:@「Age」];
}
// Decode an object from an archive
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
name = [[coder decodeObjectForKey:@「Name」] retain];
age = [coder decodeIntegerForKey:@「Age」];
}
NSArray
和NSDictionary
已經實現了系列化的方法。他們會序列化他們持有的所有對象(如果對象實現NSCoder接口 - 它們如果擴展NSObject的話)。 NSObject的encodeWithCoder
和initWithCoder
默認不做任何事情,所以除非你在你的類中實現自己的代碼,否則沒有任何序列化。
如果你有對象的NSArray或NSDictionary中,你可以使用它們同步:
// Writing
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
// Reading
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;
名字的NSString類型的對象,所以你要保留,如果你想使用它,年齡只有基本整數 – stefanB 2009-07-28 22:25:50