Как лучше всего хранить массив объектов с какао?
У меня есть NSMutableArray со многими объектами в нем. Некоторые NSStrings, другие NSMutableArrays, другие NSNumbers. Как лучше всего хранить эти данные, чтобы приложение могло использовать их снова?
Массив также должен оставаться в порядке.
Я думаю, плист или NSUserDefaults?
Большое спасибо
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];