将对象从 plist 文件复制到另一个 plist 文件

Posted

技术标签:

【中文标题】将对象从 plist 文件复制到另一个 plist 文件【英文标题】:Copying objects from plist file to another plist file 【发布时间】:2012-11-28 23:22:28 【问题描述】:

所以在我的最后一个问题中,我试图弄清楚我应该使用什么,Plist 或核心数据或 sqlight,我决定我会尝试所有这些来提高我的技能。 因此,我开始阅读有关 plist 及其工作方式的信息,但我不太确定一些事情。我正在编写的应用程序目的是为用户提供一些来自 plist 文件的不同流派的不同歌曲列表,如下所示:

用户可以选择他喜欢的歌曲并将这些歌曲添加到新列表中。 我可以复制歌曲(在我的情况下是一个 plist 文件中的简单字典)并从中创建一个新的 plist。或者我应该使用堆栈或数组将歌曲推入并使用表格视图作为出口?最终,我希望用户保存他创建的播放列表。

我很想知道我建议的某些方法是否行不通,以及这样做的更优雅的方法是什么。

谢谢

【问题讨论】:

【参考方案1】:

这样试试吧,

NSString *plistFileName = [[self documentPath] stringByAppendingPathComponent: @"Original.plist"];


if ([[NSFileManager defaultManager] fileExistsAtPath:plistFileName]) 
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistFileName];

在表格视图中显示此数据并要求用户选择歌曲。将所选的另一本字典另存为,

    NSDictionary *savedPlayListDict = //saved songs

    NSString *fileName = [[self documentPath] stringByAppendingPathComponent: @"SavedList.plist"];
    [savedPlayListDict writeToFile: fileName atomically:YES];

或者您可以创建自己的模型类来将键值对保存在字典中,并使用它来表示表的每一行。

例如:- Song 可以是具有UIImage *picNSInteger numberNSString *name 属性的模型对象。您可以将这些 Song 对象添加到一个数组中,并使用该数组填充您的表格视图。用户选择列表后,您可以将保存的列表转换为字典并保存到 plist,如上所示。

这些只是几个选项。你可以通过很多不同的方式来做到这一点。

【讨论】:

根据您的经验,plist 是不是比将代码中的所有信息都写入模型更简洁的方式来保存歌曲数据? 模型只是表示内存中数据的一种方式。 plist 用于持久化数据。两者是不同的。当你想写入光盘时,你可以使用 plist。每当您阅读它时,请将其转换为模型对象。这应该会让你的工作更轻松。当您不想保留数据时,您可以只使用数组中的模型对象。但是如果你想将它存储在某个地方并稍后使用它,你可能需要 plist 或 coredata。 也许你知道一个很好的参考\教程关于如何使用模型对象。推和弹出等'? @MikaStern,查看本教程raywenderlich.com/1797/…。他们使用 ScaryBugDoc 作为填充表格的模型对象。取而代之的是,您可以将歌曲用作模型类。 你帮了大忙。非常感谢!

以上是关于将对象从 plist 文件复制到另一个 plist 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将部分 plist 存储到文件中,然后将其合并到另一个 plist?

从 plist 读取,然后将对象保存到不同的 plist iOS

从 plist/dictionary 转换为 NSNumber 时出错

想要从 iPhone 的 plist 中的字典数组中获取数据? [复制]

NSMutableArray 从 plist 返回 Null

iPhone Dev - 从 Plist 编辑数组中的对象