Задача C Разработка iPhone, сохранение и получение NSMutableArray - PullRequest
0 голосов
/ 01 декабря 2011

Я новичок в разработке для iPhone и использую XCode 4.2 Я пытаюсь сохранить массив NSMutable, чтобы при закрытии приложения и повторном его открытии данные по-прежнему оставались там. Я использую эти две функции:

-(void)saveData{
    [NSKeyedArchiver archiveRootObject:[data copy] toFile:[self dataFilePath]];
}
- (void)loadData
{
    data = [NSKeyedUnarchiver unarchiveObjectWithFile:self.dataFilePath];
}

но я обнаружил две основные проблемы: 1 - когда я переключаю взгляды и возвращаюсь, данные исчезают 2- когда я полностью выхожу из приложения (т.е. я дважды щелкаю по кнопке Main и удаляю ее из списка запущенных приложений), данные также не стираются

Я обнаружил, что могу использовать эти два метода NSMutableArray: writeToFile и initWithContentsOfFile, но я не знаю, где их вызывать (это когда я добавляю элементы в UITableView? В viewDidLoad?

Может кто-нибудь дать мне пример кода?

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 01 декабря 2011

Для сохранения массива используйте метод writeToFile:atomically:. Это сохранит ваш NSArray контент как файл plist. Для загрузки массива из файла plist используйте метод initWithContentsOfFile:.

Обратите внимание, что эти методы смогут сохранить ваши вещи, только если ваш массив имеет следующие экземпляры классов NSString, NSData, NSDate, NSNumber NSArray или NSDictionary как товар.

Вы можете вызывать методы сохранения / загрузки, например, следующие

// in view controller implementation

- (void) saveData {
  [self.theArray writeToFile: self.filePath automatically:NO];
}

- (void) loadData {
  self.theArray = [NSArray arrayWithContentsOfFile: self.filePath];
}

- (void) viewDidLoad {
  [super viewDidLoad];

  [self loadData];
}

- (void) viewWillDisappear: (BOOL) animated {
  [super viewWillDisappear: animated];

  [self saveData];
}


// in the UIApplicationDelegate implementation
- (void)applicationWillResignActive:(UIApplication *)application {
  [myCustomController saveData];
}
0 голосов
/ 01 декабря 2011

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

- (void)applicationDidEnterBackground:(UIApplication *)application
{
//Save data
}

Что касается проблемы 1 (при переключении представлений), вам просто нужно вызвать saveData для этого методана вашем viewController:

- (void)viewWillDisappear:(BOOL)animated
{
   //Save data
}

Надеюсь, что поможет.

...