Как записать новый объект словаря в plist, содержащий массив словарей - PullRequest
0 голосов
/ 25 октября 2018

Я новичок в программировании на Objective-C и пытаюсь записать новый объект словаря в список, содержащий массив словарей с целью сохранения данных.

Моя структура списка:

<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, массив plistData остается тем же, когда я печатаю с использованием NSLog, и plist имеетне изменилось.Как мне записать новый объект словаря в список, содержащий массив словарей?

1 Ответ

0 голосов
/ 25 октября 2018

Существует код для добавления [plistData writeToURL:url atomically:YES] ниже [plistData addObject:newDict], но вы должны убедиться, что 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];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...