Сохранить и получить массив объектов в NSUserDefaults - PullRequest
0 голосов
/ 22 января 2020

Я создал собственный объект "класс", который содержит данные для моего массива.

Примечание: "данные" - это NSMutableArray

- (IBAction)addNewTodo:(id)sender {

    DataHolder *dataHolder = [[DataHolder alloc] init];

    dataHolder.todo = _inputText.text;
    dataHolder.priority = @"%d", prior;
    dataHolder.date = [dateFormatter stringFromDate:[NSDate date]];

    [data addObject:dataHolder];

    NSLog(@"%@", [data objectAtIndex:0]);

    [self saveInUserDefaults];
}


- (void) saveInUserDefaults{
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:data requiringSecureCoding:YES error:nil];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:data forKey:@"data"];
    [defaults synchronize];


- (void) retrieveUserDefaults{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        data = [NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey:@"data"]];

    NSLog(@"%@", [data objectAtIndex:0]);
}

Класс, который содержит мои данные для массив.

#import "DataHolder.h"

@implementation DataHolder

@synthesize todo;
@synthesize date;
@synthesize priority;

@end

Итак, каждый раз, когда я запускаю метод «retrieveUserDefaults», приложение выводит:

... projlab [31828: 5746912] (null)

И вывод после добавления данных в массив:

... projlab [31828: 5746912]

Так, как я могу сохранить и получить массив объектов правильным способом?

1 Ответ

0 голосов
/ 22 января 2020

Если я не ошибаюсь, вам просто нужно изменить:

data = [NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey:@"data"]];

с

data = [userDefaults objectForKey:@"data"];

, а затем привести данные к NSMutableArray, если вы хотите выполнить итерацию, например,

РЕДАКТИРОВАТЬ

Не могли бы вы использовать параметр ошибки на unarchivedObjectOfClass, чтобы проверить, нет ли ошибок при сохранении ?, один из вариантов - ваш объект не использует протокол NSSecureCoding и не работает до сохранения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...