Сохраните NSMutableArray для загрузки при повторном открытии приложения iphone

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

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

NSUserDefaults

База данных SQLite

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

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

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

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

Спасибо


person haisergeant    schedule 04.11.2010    source источник


Ответы (2)


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

person Jason    schedule 04.11.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]);
}
person arunkumar.p    schedule 04.11.2010