Сохраните NSMutableArray для загрузки при повторном открытии приложения для iphone - PullRequest
0 голосов
/ 04 ноября 2010

У меня есть NSMutableArray, каждый элемент в этом массиве - это отдельный класс. В каждом классе есть много полей, таких как CPPlot, идентификатор, ... (я использую CorePlot для разработки стандартного приложения). Теперь я хотел бы сохранить этот NSMutableArray для загрузки при повторном открытии пользователем приложения, при этом будут загружены все диаграммы, которые они использовали раньше.

Я пытаюсь выяснить, как это сделать в Stackoverflow. И я обнаружил, что есть 2 решения:

NSUserDefaults

База данных SQLite

  1. В NSUserDefaults, когда я хочу сохранить NSMutableArray, я должен реализовать с NSKeyedArchiver для архивирования и разархивирования объекта массива, а также сделать протокол NSCoding для каждого элемента в объекте массива. Но я не могу сделать это решение, потому что в каждом элементе есть некоторые поля из библиотеки CorePlot, поэтому я не могу использовать NSCoding для этих полей.

  2. База данных SQLite, я не могу использовать это решение, потому что каждый элемент в объекте массива - это отдельный класс.

Я хотел бы спросить, есть ли другое решение для решения этой проблемы?

Надеюсь, мои слова достаточно ясны для понимания.

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 ноября 2010

Используйте этот метод для сохранения:

- (NSArray *)applicationDataFromFile:(NSString *)fileName {
    NSArray *paths = NSSearchPathForDirecotiresInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask,
                                                         YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *appFile = [documentsDirectory
                         stringByAppendingPathComponent:fileName];
    NSArray *myData = [NSArray arrayWithContentsOfFile:appFile];
    return myData;
}

- (BOOL)saveToFileForStringArray:(NSMutableArray *)array
                          toFile:(NSString *)fileName {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask,
                                                         YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    if (!documentsDirectory) {
        NSLog(@"Documents directory not found!");
        return NO;
    }
    NSString *appFile = [documentsDirectory
                         stringByAppendingPathComponent:fileName];
    return ([array writeToFile:appFile atomically:YES]);
}
0 голосов
/ 04 ноября 2010

Я бы посоветовал вам выяснить, какие данные находятся в корне ваших объектов CorePlot.Если это целые числа, просто сохраните их в NSUserDefaults, а затем просто пересоберите NSMutableArray при повторном открытии приложения.Другой вариант - хранить ваши элементы в отдельном файле plist.

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