Как записать новый объект словаря в plist, содержащий массив словарей

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

Где вы распечатали свой plistData с NSLog?

RyanB 25.10.2018 04:18

@RyanB Я напечатал его прямо под NSMutableArray * plistData = [NSMutableArray arrayWithContentsOfURL: url];

Liam 25.10.2018 04:24

Что не изменилось? В списке продолжает отображаться nil или его список не обновляется с помощью newDict?

RyanB 25.10.2018 05:34

Отлаживайте свой код, переходите по нему строка за строкой, вы сможете определить проблемный код.

Cristik 25.10.2018 07:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
68
1

Ответы 1

Ниже [plistData writeToURL:url atomically:YES] есть код для добавления [plistData addObject:newDict], но вы должны убедиться, что plistData не равно нулю, чтобы найти соответствующий файл по 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];
    }

Другие вопросы по теме