Подтвердить что ты не робот

Сохранение NSArray

Я хотел бы сохранить NSArray как файл или, возможно, использовать настройки по умолчанию. Вот что я надеюсь сделать.

  • Получить уже сохраненный NSArray (если есть).
  • Сделайте что-нибудь с этим.
  • Удалить сохраненные данные (если есть).
  • Сохранить NSArray.

Возможно ли это, и если да, то как мне это сделать?

4b9b3361

Ответ 1

NSArray предоставляет вам два метода для выполнения именно того, что вы хотите: initWithContentsOfFile: и writeToFile:atomically:

Краткий пример может выглядеть так:

//Creating a file path under iOS:
//1) Search for the app documents directory (copy+paste from Documentation)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//2) Create the full file path by appending the desired file name
NSString *yourArrayFileName = [documentsDirectory stringByAppendingPathComponent:@"example.dat"];

//Load the array
NSMutableArray *yourArray = [[NSMutableArray alloc] initWithContentsOfFile: yourArrayFileName];
if(yourArray == nil)
{
    //Array file didn't exist... create a new one
    yourArray = [[NSMutableArray alloc] initWithCapacity:10];

    //Fill with default values
}
...
//Use the content
...
//Save the array
[yourArray writeToFile:yourArrayFileName atomically:YES];

Ответ 2

Вы можете реализовать NSCoding на объектах, которые содержит массив, и использовать NSKeyedArchiver для сериализации/десериализации массива на диск.

BOOL result = [NSKeyedArchiver archiveRootObject:myArray toFile:path];

Архиватор отложит вашу реализацию NSCoding, чтобы получить сериализуемые значения из каждого объекта и записать файл, который можно прочитать с помощью NSKeyedUnarchiver:

id myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];

Дополнительная информация в руководство по сериализации.

Ответ 3

Казалось бы, это проблема, наиболее подходящая для Core Data, так как это касается всех постоянных данных объекта. Когда вы извлекаете данные, он возвращает NSSet, который является несортированным, поэтому вам нужно будет каким-то образом сортировать данные в массиве, такие как уникальный номер идентификатора, ассоциированный с каждым созданным вами объектом.