Как лучше всего хранить массив объектов с какао?


У меня есть NSMutableArray со многими объектами в нем. Некоторые NSStrings, другие NSMutableArrays, другие NSNumbers. Как лучше всего хранить эти данные, чтобы приложение могло использовать их снова?

Массив также должен оставаться в порядке.

Я думаю, плист или NSUserDefaults?

Большое спасибо

2 4

2 ответа:

Рассмотрите возможность использования NSKeyedArchiver.

// Archive
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:theArray];
NSString *path = @"/Users/Anne/Desktop/archive.dat";
[data writeToFile:path options:NSDataWritingAtomic error:nil];

// Unarchive
NSString *path = @"/Users/Anne/Desktop/archive.dat";
NSMutableArray *theArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

Он отлично работает, особенно если массив содержит больше строк и чисел.
Таким образом, вы можете быть уверены, что неархивированный массив идентичен оригиналу.

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

Чтобы записать массив в файл plist, используйте writeToFile:atomically:.

[myArray writeToFile:@"path/to/file.plist" atomically:YES];

Чтобы прочитать его, используйте initWithContentsOfFile:.

myArray = [[NSMutableArray alloc] initWithContentsOfFile:@"path/to/file.plist"];

Однако, что позволит создать изменяемый массив с изменяемым содержанием. Для создания массива с изменяемым содержимым можно использовать CFPropertyListCreateDeepCopy.

NSArray *temp = [[NSArray alloc] initWithContentsOfFile:@"path/to/file.plist"];
myArray = (NSMutableArray*) CFPropertyListCreateDeepCopy(kCFAllocatorDefault,(CFArrayRef)temp,kCFPropertyListMutableContainers);
[temp release];