Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从plist文件中读取自定义对象数组?_Ios_Objective C - Fatal编程技术网

Ios 如何从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

我读过很多关于如何保存自定义对象的问题,但我不知道该怎么做。我不知道下一步该做什么这就是为什么我要问一个问题

在plist文件中保存自定义对象

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;
}