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

Iphone 将数据添加到plist而不删除以前的数据,iphone,objective-c,ios,ipad,plist,Iphone,Objective C,Ios,Ipad,Plist,正如你从标题中看到的,我基本上想更新一个plist。实际上,应用程序用户会在数据字段中键入数据,我会将它们保存在plist中。他可以添加任意多的对象。 我已经尝试了大量不同的代码为该工作人员,但没有一个工作。首先看一下我的plist(我将向您展示xml代码,以便您能够理解它) 有人能发现错误吗?我写了很多次,我检查了每一个标记,但我没有发现任何错误。我不明白为什么我不想工作 非常感谢各位我的猜测是,当您试图从文件中加载newArray时,它将返回nil,这意味着有几件事情需要处理 A) 错误路

正如你从标题中看到的,我基本上想更新一个plist。实际上,应用程序用户会在数据字段中键入数据,我会将它们保存在plist中。他可以添加任意多的对象。 我已经尝试了大量不同的代码为该工作人员,但没有一个工作。首先看一下我的plist(我将向您展示xml代码,以便您能够理解它)

有人能发现错误吗?我写了很多次,我检查了每一个标记,但我没有发现任何错误。我不明白为什么我不想工作


非常感谢各位

我的猜测是,当您试图从文件中加载newArray时,它将返回nil,这意味着有几件事情需要处理

  • A) 错误路径(尝试记录以确认)
  • B) 文件格式不好
  • C) 出于什么原因,arrayWithContentsOfFile没有创建 应该是可变数组
  • D) 可能内存不足
我点了这些,好像这是真正的问题

另一方面,为什么不使用便利构造函数
[NSMutableArray]
,它的作用与分配代码相同


另外还有一个简单的
NSLog(@“%@”,newArray)
,您可以将数组很好地打印到控制台上,以便于进行可视化调试:)

我的猜测是,当您试图从文件加载它时,newArray返回nil,这意味着有几件事情需要处理

  • A) 错误路径(尝试记录以确认)
  • B) 文件格式不好
  • C) 出于什么原因,arrayWithContentsOfFile没有创建 应该是可变数组
  • D) 可能内存不足
我点了这些,好像这是真正的问题

另一方面,为什么不使用便利构造函数
[NSMutableArray]
,它的作用与分配代码相同


另外还有一个简单的
NSLog(@“%@”,newArray)
并且您可以将数组很好地打印到控制台上,以便于进行可视化调试:)

为了它的价值,您从未为它的价值初始化过
newBuilding

,您从未初始化过
newBuilding

我刚刚读到,plist必须位于documents目录中,这样我才能在上面写东西。有人能告诉我在程序加载后如何将plist转移到documents目录吗?我刚刚读到plist必须在documents目录中才能在上面写。有人能告诉我在程序加载后如何将plist传输到documents目录吗?有没有可能问题是我没有将plist传输到documents文件夹中?是的,这就是选项A,坏路径意味着您提供的路径无效。另外,很好,David,newBuilding从来没有调用过它的init方法。有没有可能问题是我没有转移documents文件夹中的plist?是的,这就是选项a,坏路径意味着你提供的路径无效。另外,很好地抓住了David,newBuilding从未调用过它的init方法。
<?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>
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];

 }