在 NSDictionary 中编辑 plist

Posted

技术标签:

【中文标题】在 NSDictionary 中编辑 plist【英文标题】:Editing a plist in NSDictionary 【发布时间】:2011-09-22 02:45:39 【问题描述】:

我正在将一个 plist 导入到一个 NSDictionary 对象中,并且想将字典中的 plist 的内容更改为小写。我尝试了几种不同的方法,但都没有运气。也许我应该编辑 NSDictionary 中的字符串,但是我不知道该怎么做。

我目前正确导入 plist,但 lowercaseString 行实际上什么都不做。

NSString *contents = [[NSBundle mainBundle] pathForResource:@"Assets/test" ofType:@"plist"];

NSString *newContents = [contents lowercaseString];

NSDictionary *someDic = [NSDictionary dictionaryWithContentsOfFile:newContents];

for (NSString *someData in someDic) 
        NSLog(@"%@ relates to %@", someData, [someDic objectForKey:someData]);
    

我 NSLog'd 的“​​内容”字符串,它给了我一个路径值,所以显然将其更改为小写字符串不会做任何事情。我觉得我必须访问字典中的字符串。

【问题讨论】:

【参考方案1】:

这一行

NSString *newContents = [contents lowercaseString];

是改变返回的路径字符串

NSString *contents = [[NSBundle mainBundle] pathForResource:@"Assets/test" ofType:@"plist"];

所以你最终会得到类似 ../assets/test.plist 的东西

您需要浏览 someDic 的内容,并根据旧的将字符串转换为小写字母创建一个新字典,如果您只关心 someDic 中的值,您可以执行类似的操作

for( NSString * theKey in someDic )

    id     theObj = [someDic objectForKey:theKey];
    if( [theObj isKindOfClass:[NSString class]] )
        theObj = [theObj lowercaseString];
    [theNewDict setObject:theObj forKey:theKey];

【讨论】:

我想你会使用 dictionaryWithDictionary 来处理第一个字典的属性,但是我如何定位其中的字符串以将它们设置为小写? 不只是动态创建新字典,无论如何你都要替换新条目。 我必须手动替换每个条目吗?如果某些条目是包含数组和字符串的字典怎么办?我只是不确定我会如何做到这一点,也找不到类似的东西。 您将不得不递归地执行此操作,创建两个函数或方法,一个接受 NSArray 并返回小写版本,另一个接受 NSDictionary 并返回小写版本,在这些函数中,当每当您找到一个数组或字典时,都会使用该字典或数组调用数组或字典函数,并将结果插入到您正在创建的数组或字典中。 感谢您的帮助!哈哈,我会回来回答你的。

以上是关于在 NSDictionary 中编辑 plist的主要内容,如果未能解决你的问题,请参考以下文章

从 CoreData 在 NSDictionary 中制作嵌套 JSON

使用 NSDictionary 内容创建 NSManagedObject

将 NSDictionary 保存到 plist

NSDictionary - 将相同的 id'ed 元素堆叠到另一个字典中

如何在不更改原始内容的情况下操作 NSDictionary 内容的副本

iOS 不兼容的指针类型(来自 NSDictionary 的 NSMutableDictionary)