Для сериализации пользовательского объекта вам просто необходимо соответствовать протоколу NSCoding
. Если ваш объект расширяет NSObject, все, что вам нужно сделать (я считаю), это реализовать их (пример для объекта person):
// 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). encodeWithCoder
и initWithCoder
NSObject по умолчанию ничего не делают, поэтому, если вы не реализуете собственный код в своих классах, ничего не сериализуется.
Если у вас есть 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;