簡體   English   中英

如何將新字典對象寫入包含字典數組的plist

[英]How to write a new dictionary object to plist containing an array of dictionaries

我是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?

[plistData addObject:newDict] [plistData writeToURL:url atomically:YES]下有代碼添加[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];
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM