Невозможно сохранить NSMutableArray в NSUserDefaults - PullRequest
0 голосов
/ 20 декабря 2011

Я пытаюсь сохранить NSMutableArray на устройстве, но каждый раз, когда я перезагружаю приложение, данные стираются.

Я пытался использовать NSUserDefaults, но проблема сохраняется

вот код, который я использую

-(void) addingData{

    [data addObject:theBarcodeString]; //data is the NSMutableArray

    [mainTableView reloadData]; //this is a UITableView where the data from the NSMutableArray is populated
    [self endText];
    history=[NSUserDefaults standardUserDefaults];
    [history        setObject:data          forKey:@"history"  ];
}

и вот где я загружаю данные

- (void)viewDidLoad
{
    ...
    if (data == nil) {
        data = [[NSMutableArray alloc] init]; //onload it always goes to his line

    else {

        data=[[NSUserDefaults standardUserDefaults] objectForKey:@"history"  ];
    }
    ...
}

что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Вы не должны тестировать, чтобы увидеть, если данные == ноль.Вместо этого просто выполните:

data = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] 
    objectForKey:@"history"]];

Обратите внимание, что вам придется выпустить его позже.

Если вы хотите, чтобы data был изменяемым массивом, вы должны используйте:

data = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"history"];

Если вы попытаетесь выполнить операции с данными с переменными без использования mutableArrayValueForKey, вы получите сбой, потому что все объекты, возвращаемые из NSUserDefaults, являются неизменяемыми.

0 голосов
/ 20 декабря 2011

синхронизация Записывает любые изменения в постоянные домены на диск и обновляет все неизмененные постоянные домены на то, что находится на диске.

  • (BOOL) синхронизирует

Возвращаемое значение ДА, если данные были успешно сохранены на диск, в противном случае НЕТ.

Таким образом, вы должны добавить [history synchronize] для принудительной записи по умолчанию

Изменить: с Документы

Поскольку этот метод вызывается автоматически через определенные промежутки времени, используйте этот метод, только если вы не можете ждать автоматической синхронизации (например, если ваше приложениедля выхода) или если вы хотите обновить пользовательские настройки по умолчанию на то, что находится на диске, даже если вы не внесли никаких изменений.

Поэтому, если вы хотите сохранить изменения, немедленно позвоните [history synchronize].

...