如何将 NSArray 添加为 NSMutableDictionary 的 NSMutableDictionary 键?
Posted
技术标签:
【中文标题】如何将 NSArray 添加为 NSMutableDictionary 的 NSMutableDictionary 键?【英文标题】:How to add an NSArray as a NSMutableDictionary key for a NSMutableDictionary? 【发布时间】:2011-10-14 03:22:01 【问题描述】:我尝试了以下操作:
NSMutableArray *myArr = [NSMutableArray arrayWithArray:[myDict objectForKey:@"myKey"]];
[myArr addObject:@"New string xxx"];
[myDict setObject:myArr forKey:@"myKey"];
// Write to file (done successfully)
如您所见,我得到了一个数组,它存储在 plist 中,键为 @"myKey"
,向其中添加一些对象并希望在 plist 上重新记录它,当然还有一些额外的值。
问题是,我的 plist 上发生了以下情况:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
<key>myKey</key>
<array>
<string>First entry on the plist</string>
<array>
<string>First entry on the plist</string>
<string>New string xxx</string>
</array>
</array>
</dict>
</plist>
所需的输出当然是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
<key>myKey</key>
<array>
<string>First entry on the plist</string>
<string>New string xxx</string>
</array>
</dict>
</plist>
【问题讨论】:
两件事:1. 一个 NSLog(@"myDict: %@", myDict);将显示字典而无需编写它。 2. 仔细考虑每一个语句正在做什么。将复合语句分解为多个语句,每个语句执行一件事。一个例子是第一条语句,它做了两件事,访问字典的内容和初始化一个数组。这将使人们更容易理解正在发生的事情,或者明确声明没有被理解。 发布的代码似乎没有问题。myDict
在您发布的代码执行之前处于预期状态,之后处于意外状态?
【参考方案1】:
您是否尝试在重新设置之前调用[myDict removeObjectForKey:@"myKey"]
?
【讨论】:
【参考方案2】:工作正常
NSMutableArray *myArr = [NSMutableArray arrayWithArray:[myDict objectForKey:@"myKey"]];
[myArr addObject:@"New string xxx"];
[myDict setObject:myArr forKey:@"myKey"];
[myDict writeToFile:@"/path/p.text" atomically:NO];
[myArr addObject:@"new object"];
[myDict setObject:myArr forKey:@"myKey"];
[myDict writeToFile:@"/path/p.text" atomically:NO];
输出:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>myKey</key>
<array>
<string>New string xxx</string>
<string>new object</string>
</array>
</dict>
</plist>
【讨论】:
以上是关于如何将 NSArray 添加为 NSMutableDictionary 的 NSMutableDictionary 键?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 NSArray 添加为 NSMutableDictionary 的 NSMutableDictionary 键?