1

我突然想到,如果我从磁盘中检索对象,我不知道如何最好地处理这样的情况,在这种情况下,我知道它应该只是类型NSDictionary。但是做出假设并不是很好的编码习惯,所以......检查它是哪个类然后将其转换为字典是规范吗?

如果是这样,我会先在一个NSData类中检索文件,然后再询问它是否是一个NSDictionary类?

    NSString *destinationString = [NSString stringWithFormat:@"%@/%@",dataPath,filename];

    NSDictionary *file = [[NSDictionary alloc]initWithContentsOfFile:destinationString];
    if (file) {
        return YES;
    }
    return NO;
}
4

3 回答 3

3

你不知道initWithContentsOfFile是如何实现的。有可能它会检查文件的开头以查看它是否与字典匹配,如果不匹配则提前退出(返回nil)。它可能比首先获取数据更有效。

根据文档initWithContentsOfFile,该方法检查文件中包含的数据类型,并且不会向您返回“坏”或“错误”对象,因此您可以确定非 nil 对象是好的。

您的代码是否需要尝试创建一个数组然后创建一个字典是另一回事。

于 2013-06-24T20:14:36.487 回答
3

以您描述的方式实现持久性非常脆弱。任何微小的更改都可能破坏您的持久性解决方案并引入意外错误。如果你需要轻量级的持久性,你可以看看Github 的 Mantle。Mantle 允许您构建一个类型化的可序列化模型,您可以轻松地将其保存到文件中并读回。此外,它支持版本控制,如果您必须随着时间的推移发展您的模型,这一点至关重要。

于 2013-06-24T20:19:52.090 回答
2

坚持对您的应用程序有意义的一流模型。实施NSCoding和使用NSKeyedArchiverand NSKeyedUnarchiver. 或者正如@allprog 建议的那样,使用 Mantle,这实际上就是他们正在做的事情,他们只是让你的样板代码更少。

于 2013-06-24T20:26:54.153 回答