Ios 如何从plist文件中读取自定义对象数组?
我读过很多关于如何保存自定义对象的问题,但我不知道该怎么做。我不知道下一步该做什么这就是为什么我要问一个问题 在plist文件中保存自定义对象Ios 如何从plist文件中读取自定义对象数组?,ios,objective-c,Ios,Objective C,我读过很多关于如何保存自定义对象的问题,但我不知道该怎么做。我不知道下一步该做什么这就是为什么我要问一个问题 在plist文件中保存自定义对象 NSLog(@"%@",self.drawingView.pathArray); NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:self.drawingView.pathArray]; [arrayData writeToFile:[DOCUMENTPATH stringB
NSLog(@"%@",self.drawingView.pathArray);
NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:self.drawingView.pathArray];
[arrayData writeToFile:[DOCUMENTPATH stringByAppendingPathComponent:@"1.plist"] atomically:YES];
控制台o/p
(
"<PenTool: 0xa031f80;>",
"<PenTool: 0x8b2b360;>",
"<PenTool: 0xa03aca0;>",
"<PenTool: 0x8b38780;>"
)
这里我得到一个数据。但不是数组。我已经读过了,但是有人说你必须保存数据。但我不知道该怎么做
编辑
我知道我必须使用以下两种方法,但我没有得到一个想法
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
}
是否有其他方法在文件中存储自定义对象。基本上,plist是在NSDictionary中保存数据的一种方法,因此我想您应该不使用数组,开始使用dictionary,在这种情况下,您的
PenTool
类需要实现NSCoding
。这在下面进行了描述
这里有几个有用的例子
这些代码片段来自《归档和序列化编程指南》,键是字符串
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.firstName forKey:ASCPersonFirstName];
[coder encodeObject:self.lastName forKey:ASCPersonLastName];
[coder encodeFloat:self.height forKey:ASCPersonHeight];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
_firstName = [coder decodeObjectForKey:ASCPersonFirstName];
_lastName = [coder decodeObjectForKey:ASCPersonLastName];
_height = [coder decodeFloatForKey:ASCPersonHeight];
}
return self;
}
但是我有自定义对象和所有的绘图属性。。这里有没有其他方法来存储自定义对象我必须进行NSCoding。。但是您的问题链接没有为NSCoding提供任何答案。我对NSCoding没有任何想法。请阅读《归档和序列化编程指南》中的编码和解码章节。希望上面的《从编程指南复制和粘贴》解释了您需要做什么。
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:self.firstName forKey:ASCPersonFirstName];
[coder encodeObject:self.lastName forKey:ASCPersonLastName];
[coder encodeFloat:self.height forKey:ASCPersonHeight];
}
- (id)initWithCoder:(NSCoder *)coder {
self = [super init];
if (self) {
_firstName = [coder decodeObjectForKey:ASCPersonFirstName];
_lastName = [coder decodeObjectForKey:ASCPersonLastName];
_height = [coder decodeFloatForKey:ASCPersonHeight];
}
return self;
}