Я хочу, чтобы мое приложение работало так, что когда пользователь нажимает кнопку «Сохранить», будет сохранен NSMutableArray строк (массив называется «имена»), введенный из текстового поля. Естественно, я также хочу, чтобы иметь возможность загружать NSMutableArray в любое время, когда я закрываю/открываю приложение.Сохранение и загрузка NSMutableArray
Прямо сейчас моя кнопка сохранения - это «Сохранить» IBAction. Поэтому в моем файле реализации у меня есть:
- (IBAction)save:(id)sender
{
NSArray *paths = NSSearchPathforDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"%@/myArray", docDir];
[NSKeyedArchiver archiveRootObject:names toFile:fileName];
}
Прежде всего, похоже ли это, что он должен работать? Поскольку несколько раз мое приложение разбилось, когда я пытался, нажмите кнопку «Сохранить». Во-вторых, правильно ли я создаю путь к файлу в IBAction? Или я должен создавать его где-то еще (например, в viewDidLoad)?
Во-вторых, как и где я должен загружать сохраненный NSMutableArray («имена»)?
Большое спасибо!
1. Обработка данных должна осуществляться в классе модели данных, она не является частью пользовательского интерфейса. 2. Что такое 'names', он полностью совместим с NSCoding? 3. +10 для использования 'NSKeyedArchiver', а не' NSUserDefaults'! – zaph
@ Zaph "names" - это имя созданного мной NSMutableArray (в другом месте моего кода), который содержит различные строки, введенные пользователем. Это своего рода глупый вопрос, но просто для того, чтобы уточнить: так что я не должен иметь этот код под IBAction? – Julia
Какова фактическая информация о сбое/трассе? Код выглядит нормально на первый взгляд, но, возможно, он не пишет файл, возможно, в массиве есть объект, который на самом деле не является строкой и т. Д. Ошибка должна помочь. Также согласитесь с @zaph -> сериализовать где-то в другом месте (но это не причина ошибки). (Может быть, экономия даже не связана с этим методом?) – KirkSpaziani