【问题标题】:How to write a new dictionary object to plist containing an array of dictionaries如何将新的字典对象写入包含字典数组的 plist
【发布时间】:2019-03-29 12:39:48
【问题描述】:

我是 Objective-C 编程的新手,我正在尝试将一个新的字典对象写入一个包含字典数组的 plist,以保存数据。

我的 plist 结构是:

<plist>
    <array>
        <dict>
            <key>toyName</key>
            <string>N64</string>
            <key>toyBrand</key>
            <string>Nintendo</string>
        </dict>
    </array>
</plist>

我尝试编写新字典的功能:

-(void)saveData {
    NSFileManager *fm = [NSFileManager new];
    NSError *err = nil;
    NSURL *docsurl = [fm URLForDirectory:NSDocumentDirectory
                            inDomain:NSUserDomainMask
                   appropriateForURL:nil
                              create:YES
                               error:&err];
    NSURL *url = [docsurl URLByAppendingPathComponent:@"Toy.plist"];

    NSMutableArray *plistData = [NSMutableArray arrayWithContentsOfURL:url];

    NSMutableDictionary *newDict = [[NSMutableDictionary alloc]init];

    NSDate * now = [NSDate date];

    [newDict setValue:itemText.text forKey:@"toyName"];
    [newDict setValue:brandText.text forKey:@"toyBrand"];

    [plistData addObject:newDict];
}

调用saveData函数时,我使用NSLog打印时plistData数组还是一样的,plist没有变化。如何将新的字典对象写入包含字典数组的 plist?

【问题讨论】:

  • 你在哪里打印了plistDataNSLog
  • @RyanB 我直接打印在 NSMutableArray *plistData = [NSMutableArray arrayWithContentsOfURL:url];
  • 什么没有改变? plist 一直显示nil 或其列表未更新为newDict
  • 调试你的代码,逐行遍历它,你应该能够识别出有问题的代码。

标签: ios objective-c arrays dictionary plist


【解决方案1】:

[plistData addObject:newDict]下面有代码要添加[plistData writeToURL:url atomically:YES],但是要确保plistData不为nil,通过url找到对应的文件。

例如:

-(void)saveData {
        NSFileManager *fm = [NSFileManager new];
        NSError *err = nil;
        NSURL *docsurl = [fm URLForDirectory:NSDocumentDirectory
                                inDomain:NSUserDomainMask
                       appropriateForURL:nil
                                  create:YES
                                   error:&err];
        NSURL *url = [docsurl URLByAppendingPathComponent:@"Toy.plist"];

        NSMutableArray *plistData = [NSMutableArray arrayWithContentsOfURL:url];

        NSMutableDictionary *newDict = [[NSMutableDictionary alloc]init];

        NSDate * now = [NSDate date];

        [newDict setValue:itemText.text forKey:@"toyName"];
        [newDict setValue:brandText.text forKey:@"toyBrand"];

        [plistData addObject:newDict];
    }

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多