2013-01-01 89 views
0

我有一个字典数组,它保存在应用程序的文档目录中 如何更新特定键和索引的值? 例如:我要更新第二词典人的名字字典数组/如何更新特定键和索引的值?

<?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"> 
<array> 
     <dict> 
      <key>personName</key> 
      <string>John Sculey</string> 
      <key>isPersonAdult</key> 
      <true/> 
      <key>personID</key> 
      <integer>12541</integer> 
      <key>personPicture</key> 
      <string>john.jpg</string> 
      <key>personDesignation</key> 
      <string>Branding Manager</string> 
      <key>personDepartment</key> 
      <integer>2</integer> 
      <key>personEmail</key> 
      <string>[email protected]</string> 
    </dict> 
    <dict> 
      <key>personName</key> 
      <string>Chris Seattle</string> 
      <key>isPersonAdult</key> 
      <true/> 
      <key>personID</key> 
      <integer>89854</integer> 
      <key>personPicture</key> 
      <string>chris.jpg</string> 
      <key>personDesignation</key> 
      <string>Branding Manager</string> 
      <key>personDepartment</key> 
      <integer>2</integer> 
      <key>personEmail</key> 
      <string>[email protected]</string> 
    </dict> 

等等....

+2

是不是'[阵列objectAtIndex:1]的setObject:@ “新名称” forKey:@ “PERSONNAME”];'不够好? – 2013-01-01 22:33:05

+0

是的,这是足够好:)谢谢 – yusufag

回答

0

不知道,如果我得到你的问题是正确的。但是,如果你问,你怎么可以查阅字典在阵列的具体指标,这将是这样:

NSMutableDictionary *person = [NSMutableDictionary dictionaryWithDictionary:[array objectAtIndex:1]]; 
[person setValue:@"Chris Washington" forKey:@"personName"]; 

不要紧,什么样的数组中存放的对象;它可以是数字或 - 与你的情况 - 字典对象。你照常访问它们。

1

所以,假设你的字典是可变的,

[[array objectAtIndex:1] setObject:@"New Name" forKey:@"personName"]; 

(如果不是,创建一个可变副本它beforehands。)

-1

你可以做你想做一个什么数代码行...首先,您要从数组中获取要编辑的字典,然后更改密钥的值。我没有测试过这个代码,但它应该工作得很好!

NSURL *documents = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
NSURL *plistUrl = [documents URLByAppendingPathComponent:@"yourPlistName.plist"]; 
NSArray *plistContents = [NSArray arrayWithContentsOfURL:plistUrl]; 
NSMutableDictionary *personToEdit = [plistContents objectAtIndex:1]; 
[personToEdit setValue:@"value you want to set" forKey:@"your key"]; 
+0

将不会工作,而不是一个可变的字典 –

+0

是的,但我认为这是一个可变的字典,我只输入错误,因为我从iPad回答,它不是很舒适。 ..对不起! – matteodv

+0

没有。 arrayWithContentsOfURL会给你不可变的东西 –

0

我的2美分太:d

id data = [NSData dataWithContentsOfFile:plistFile]; 
NSArray *plist = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListMutableContainersAndLeaves format:nil error:nil]; 
assert([plist isKindOfClass:[NSArray class]]); 

//every element in the array is mutable 
NSMutableDictionary *dict = plist[1]; 
dict[@"key"] = @"value"; 
相关问题