创建 XML 时如何有效地检查 NSDictionay 键是不是具有值
Posted
技术标签:
【中文标题】创建 XML 时如何有效地检查 NSDictionay 键是不是具有值【英文标题】:How to check if NSDictionay key has a value efficiently when creating XML创建 XML 时如何有效地检查 NSDictionay 键是否具有值 【发布时间】:2013-11-16 07:43:21 【问题描述】:我正在目标 C 中创建一些 XML,我知道如何去做,但是我可能会将 800 多个值放入 XML 中,这些值是从 NSDictionaries 的 NSArray 中获取的。
所以我想知道是否有一种有效的方法来检查 NSString 类型的键值中的 nill 或 null。
目前这是我的代码的样子:
NSMutableArray *xmlItems = [coreDataController readInstallForXML:selectedInstallID];
for (int i = 0; i < [xmlItems count]; i++)
NSDictionary *currentXMLItem = [xmlItems objectAtIndex:i];
[xmlWriter writeStartElement:@"Items"];
[xmlWriter writeAttribute:@"insID" value:[currentXMLItem valueForKey:@"insID"]];
// there are about another 20 attributes I have to add here.
// then write end elemtent etc.
在上面的代码中,我没有添加任何检查,但我希望有人可以为我提供比为每个属性添加一堆 if
语句更好的东西。
【问题讨论】:
【参考方案1】:您可以使用 [NSDictionary allKeysForObject:] 获取“nil”值的所有键,因此您有一个要忽略的键列表。
生成 800 个项目不一定是“多”或“慢”。无论如何,您都不想在主线程上执行此操作,因此请确保将其作为后台操作执行。
【讨论】:
说当我循环创建每个项目时,当前的 NSdictionary 对象可能与下一个对象具有不同的值(即,说一个键在循环的下一次迭代之前可能为空,那么它可能不是零……那么 allKeysForObject 的工作原理是什么? 你如何将 nil 值作为键?在遍历字典之前,只获取一次“allKeysForObject:”。在循环中,您可以根据“allKeysForObject”结果检查键以忽略所有空值。【参考方案2】:使用 NSDictionary 上的 allKeys 方法返回一个 NSArray 键;然后遍历该数组并为每个键从字典中检索值并使用一个 if 语句在写出 xml 元素之前检查字符串
【讨论】:
但是如果我有 20 个 if 语句和数组中有 800 个项目,那会不会很慢。还没有在我的代码中显示它,但我还有大约 20 个属性需要添加。 哦,好吧,我想我误会了你。在我现在只是想找到一些关于它的信息之前,我从未使用过 allKeys。 是否有机会提供一小段示例代码?我只是以前从未使用过此功能。以上是关于创建 XML 时如何有效地检查 NSDictionay 键是不是具有值的主要内容,如果未能解决你的问题,请参考以下文章