2015-07-13 88 views
0

我正在写一个'NSMutableDictionary'的plist。这很好。iOS - 添加项目到plist

但是当我想添加到文件中时,新条目覆盖第一个条目。

我想什么是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<names> 
<name1> 
    <key> 
     firstname 
    </key> 
    <value> 
     mememememe 
    </value> 
    <key> 
     lastname 
    </key> 
    <value> 
     mememememe 
    </value> 

</name1> 
<name2> 
    <key> 
     firstname 
    </key> 
    <value> 
     mememememe 
    </value> 
    <key> 
     lastname 
    </key> 
    <value> 
     mememememe 
    </value> 

    </name2> 
</names> 
Here's my code so far: 



    NSString *filename = [documents stringByAppendingPathComponent:@"faves.plist"]; 
    NSMutableDictionary *loadedMiscDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filename]; 

NSArray *directories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documents = [directories firstObject]; 

    NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] init]; 
    [tempDict setValue:firstNameString forKey:@"firstname"]; 
    [tempDict setValue:secondNameString forKey:@"secondName"]; 

    [loadedMiscDictionary addEntriesFromDictionary:tempDict]; 
    [loadedMiscDictionary writeToFile:filename atomically:YES]; 

请让我知道我做错了。 TIA

UPDATE

我改变了我上面的代码片断..

+0

你用过我的回答 –

+0

无,答案还没有完成。 –

+0

意味着你想说什么我没有得到你的问题。是否需要一些代码或其他东西 –

回答

0

你应该用右键点击+添加一行顶级类别和子类别使用+号在plist文件添加新的

+0

感谢您的回答,但我需要这是一个动态的plist。 –

+0

如果我说得对,如果你的密钥相同,那么它将覆盖。您需要为每个对象使用不同的键。 –

+0

改善你的代码更多。 1.由于第一次可能没有数据/ plist文件存在,请通过检查字典计数([loadedMiscDictionary count] == 0)检查它是否为true,然后将您的应用程序字典数据直接添加到文件。 2.if false然后使用[loadedMiscDictionary addEntriesFromDictionary:tempDict];添加新条目和[loadedMiscDictionary setDictionary:tempDict];用于更新旧的一次。 –

1

你的代码覆盖的plist的旧条目。您没有在字典中获得plist文件条目。只需创建一个新字典,添加一些新条目并覆盖旧文件。

  • 存储它的NSMutableDictionary或NSMutableArray的
  • 在字典添加新条目plist文件数据。或数组
  • 在最后获取当前文件位置并存储新创建的字典。或者在其中携带新旧条目的数组。

我希望它会帮助你