如何将 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 键?

将对象添加到排序的 NSMutable 数组并回答索引路径

Objective-C数组和字典

如何将 NSMutable 数组中的数据存储在 Core Data 中?

如何将NSMutable数组附加到现有文件中

将 NSMutable 数组存储到 sqlite 数据库中