如何从plist加载属性名称?

时间:2014-07-23 21:40:53

标签: objective-c json plist

我将数据从一段JSON加载到一个对象中。我循环浏览了JSOn的NSDictionary,发现我正在编写一个令人讨厌的ifs阶梯,如下所示:

 if ([item isEqualToString:@"SiteName"]) {
 site.siteName = key[item];
 }
 if ([item isEqualToString:@"SiteUID"]) {
 site.siteUID = key[item];
 }
 if ([item isEqualToString:@"Own"]) {
 NSNumber *num = key[item];
 site.isOwnSite = [num boolValue];
 }
 if ([item isEqualToString:@"CompetingOwnSiteId"]) {
 site.competingOwnSiteId = key[item];
 }
 if ([item isEqualToString:@"LATY_NUM"]){
 site.LATY_NUM = key[item];
 }
 if ([item isEqualToString:@"LONX_NUM"]) {
 site.LONX_NUM = key[item];
 }

这对我不起作用 - 它很丑陋和黑客 - 所以我估计我可以将属性名称和相应的NSString放入plist中,例如:

enter image description here

我可以将plist的内容抓取到另一个NSDictionary中,因此通过循环遍历两者,我可以在plist中使用正确的方法名称映射JSON中的内容。

但是......

我不知道如何获取属性名称以附加'到站点对象。 (对不起这个非常技术性的术语......)。例如,我想从plist获取NSString siteName ,并希望以某种方式生成等效的

site.*siteName* = key[@"SiteName"];

如果你能理解这种意识流,你能帮助我吗?

非常感谢! 安迪

2 个答案:

答案 0 :(得分:1)

我建议使用JSONModel POD而不是plist 您可以找到here文档和示例。它提到Data models that take care of: Input Validation, Type Casting, Class Cascading & more. Automatically.可能会在不久的将来节省你一些时间 正如Github页面上所提到的,here是关于"如何使用数据模型获取和解析JSON的分步教程"这可能是你感兴趣的。

如果您以前没有使用POD,here是一个非常直接的教程,可以设置它。

我将它用于我目前正在进行的项目中,我发现它很容易设置和使用。

答案 1 :(得分:1)

您正在寻找Key-Value Coding。我假设key是包含属性名称键映射的plist。如果是这样,这就是您正在寻找的基本形式:

[site setValue: whatever forKey: key[@"SiteName"]];