将数据添加到plist而不删除以前的数据

将数据添加到plist而不删除以前的数据

问题描述:

正如你可以从标题中看到的,我基本上想更新一个plist。实际上,应用程序用户将在数据字段中键入他的数据,我会将它们保存在plist中。他可以添加尽可能多的物体,他喜欢。 我已经为该员工尝试了大量不同的代码,并且他们都没有工作。首先,来看看我的plist(我提出你的XML代码,所以你可以把它理解)将数据添加到plist而不删除以前的数据

<?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>name</key> 
      <string>TEST</string> 
      <key>code</key> 
      <string>TEST</string> 
      <key>longitude</key> 
      <integer>22</integer> 
      <key>latitude</key> 
      <integer>10</integer> 
     </dict> 
    </array> 
</plist> 

这仅仅是一个简单的条目。现在这里是我使用的lates代码,但我没有运气

NSMutableDictionary *newBuilding = [NSMutableDictionary alloc]; 
    [newBuilding setValue:@"Test1" forKey:@"name"]; 
    [newBuilding setValue:@"Test2" forKey:@"code"]; 
    [newBuilding setValue:@"10" forKey:@"latitude"]; 
    [newBuilding setValue:@"20" forKey:@"longitude"]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); 

    NSString *documentsPath = [paths objectAtIndex:0]; 

    NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"BuildingsInfo.plist"]; 

    NSMutableArray *newArray = [NSMutableArray arrayWithContentsOfFile:plistPath]; 

    if (nil == newArray) { 
     newArray = [[NSMutableArray alloc] initWithCapacity:0]; 
    } 

    [newArray addObject:newBuilding]; 
[newArray writeToFile:plistPath atomically: YES]; 

} 

任何人都可以发现任何错误吗?我已经写了很多次,我已经检查了每个标记,但是我没有发现任何错误。我不明白为什么我不想工作!

非常感谢球员

+0

我刚刚读过plist必须在文档目录中,以便我能够在上面写下它。一旦程序被加载,任何人都可以让我知道如何将plist传输到文档目录中? – user1015777 2012-03-03 00:17:26

对于它的价值,你永远不会初始化newBuilding

我的猜测是,newArray是当你正试图从该文件,这意味着几件事加载它返回nil。

  • A)错误路径(尝试记录以确认)
  • B)文件格式不
  • C)对于什么都原因,arrayWithContentsOfFile也没有创造一个 可变数组,因为它应该
  • d)可能运行内存

我在它存在的真正问题的相似性排序的这些。

在一个侧面说明,为什么不使用便捷构造[NSMutableArray array],它与您的分配代码。

也是一个简单NSLog(@"%@", newArray),你会得到很好地打印到控制台,便于可视化调试数组:)

+0

问题是否有可能是我没有在文档文件夹中传输plist? – user1015777 2012-03-03 00:40:59

+0

是的,这就是A选项,不好的路径意味着你提供的路径是无效的。此外,很好的大卫,newBuilding从来没有接到过它的init方法的调用。 – 2012-03-03 23:52:52