【问题标题】:How to read array of custom objects from a plist file?如何从 plist 文件中读取自定义对象数组?
【发布时间】:2014-08-15 07:42:47
【问题描述】:

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

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

NSLog(@"%@",self.drawingView.pathArray);
NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:self.drawingView.pathArray];
[arrayData writeToFile:[DOCUMENTPATH stringByAppendingPathComponent:@"1.plist"] atomically:YES];

控制台操作

(
    "<PenTool: 0xa031f80;>",
    "<PenTool: 0x8b2b360;>",
    "<PenTool: 0xa03aca0;>",
    "<PenTool: 0x8b38780;>"
)

上面的代码工作正常。保存在 plist 中。现在我想取回该 plist 中的所有对象。

从 plist 中读取

NSData *data=[NSData dataWithContentsOfFile:[DOCUMENTPATH stringByAppendingPathComponent:@"1.plist"]];
self.pathArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

我在这里获取数据。但不是数组。我已经读过这方面的信息,但有人说你必须unarhive数据。但我不知道如何取消归档。

编辑

我知道我必须使用以下两种方法,但没有得到一个想法。

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    return self;
}

- (void)encodeWithCoder:(NSCoder *)encoder {
}

有没有其他方法可以将自定义对象存储在文件中。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您的PenTool 类需要实现NSCoding。这是描述Archives and Serialisations Programming Guide

    这个question 有几个有用的例子。

    这些代码 sn-ps 来自存档和序列化编程指南,键是字符串。

    - (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 没有任何想法。请指导我
    • 参见存档和序列化编程指南中的编码和解码章节。
    • 希望以上来自编程指南的复制和粘贴说明了您需要做什么。
    【解决方案2】:

    基本上 plist 是一种在 NSDictionary 中保存数据的方法,所以我想你应该不理会数组,在这种情况下开始使用字典

    【讨论】:

    • 但是我有带有所有绘图属性的自定义对象.. 我怎么能在这里拿字典
    • 有没有其他方法来存储自定义对象
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2011-12-28
    • 2020-03-23
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多