Shr*_*hri 2 iphone cocoa-touch objective-c ios nsdocumentdirectory
我有一个名为XYZ的类继承自NSObject和一个包含XYZ对象的数组.我需要将此数组写入文档目录中的plist文件.在尝试[array writeToFile ....]后,我发现writeToFile失败,因为该数组包含XYZ类的自定义对象.
可能的解决方案是将对象转换为NSData.有什么不同的方法来实现这一目标?我发现NSCoding很合适,但无法理解如何使用它.任何帮助将不胜感激.
Ray Wenderlich的博客上有一个非常好的教程,解释了如何使用NSCoding.
只需要在你的对象中实现* - (void)encodeWithCoder:(NSCoder )编码和* - (id)initWithCoder:(NSCoder )解码器方法,就像那样尊重NSCoding协议:
// Header
@interface AnObject: NSObject <NSCoding>
// Implementation
- (void) encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:ivar1 forKey:@"ivar1"];
[encoder encodeFloat:ivar2 forKey:@"ivar2"];
}
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:coder];
ivar1 = [[coder decodeObjectForKey:@"ivar1"] retain];
ivar2 = [[coder decodeObjectForKey:@"ivar2"] retain];
return self;
}
Run Code Online (Sandbox Code Playgroud)
您也可以在此处查看官方文档.
实现后encodeWithCoder:
,initWithCoder:
对于自定义类,这里是如何写和读:
写:
NSError *error;
NSData* archiveData = [NSKeyedArchiver archivedDataWithRootObject:yourClassInstance];
[archiveData writeToFile:filePath options:NSDataWritingAtomic error:&error];
Run Code Online (Sandbox Code Playgroud)
读:
NSData *archiveData = [NSData dataWithContentsOfFile:filePath];
YourClass *yourClassInstance = (NSArray*)[NSKeyedUnarchiver unarchiveObjectWithData:archiveData];
Run Code Online (Sandbox Code Playgroud)