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

时间:2012-03-02 23:31:27

标签: iphone objective-c ios ipad plist

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

<?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];

 }

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

非常感谢你们

2 个答案:

答案 0 :(得分:2)

对于它的价值,你从未初始化newBuilding

答案 1 :(得分:1)

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

  • A)错误路径(尝试记录确认)
  • B)文件格式不正确
  • C)由于某种原因,arrayWithContentsOfFile没有创建 可变数组,因为它应该
  • D)可能内存不足

我把它们命名为真正的问题。

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

同样是一个简单的NSLog(@"%@", newArray),你可以很好地将数组打印到控制台上,以便于可视化调试:)