2011-10-14 39 views
2

我试着做以下几点:如何添加NSArray作为NSMutableDictionary的一个NSMutableDictionary键?

NSMutableArray *myArr = [NSMutableArray arrayWithArray:[myDict objectForKey:@"myKey"]]; 
[myArr addObject:@"New string xxx"]; 
[myDict setObject:myArr forKey:@"myKey"]; 
// Write to file (done successfully) 

正如你所看到的,我得到被存储在与键@"myKey"一个plist中的数组,一些对象添加到它,并希望重新录制的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> 
+0

两两件事:1.一个的NSLog(@ “myDict:%@”,myDict);将显示字典而无需编写它。 2.仔细想想每个陈述都在做什么。将复合语句分解为多个语句,每个语句都做一件事。一个例子是做两件事的第一条语句,访问字典的内容并初始化一个数组。这将使得理解发生的事情变得容易或者明确表明一个陈述不被理解。 – zaph

+0

发布代码似乎没有问题。在您发布的代码执行之前,'myDict'是否处于预期状态,并且在它之后处于意外状态? –

回答

0

您是否尝试过重新设置之前调用[myDict removeObjectForKey:@"myKey"]

0

其工作细

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> 
相关问题