Как хранить NSArray на вторичном хранилище?

Я новичок в iOS, я хочу сохранить значения в NSArray на вторичном хранилище, чтобы потом получить доступ к нему. Массив - это большой ответ от веб-службы, я хочу разобрать и показать его. Это неэффект для анализа массива и хранить в sqlite DB, я хочу альтернативный способ сохранить этот массив, может быть в текстовом файле, так что я не могу извлечь данные из текстового файла и проанализировать его с помощью моей функции синтаксического анализа. мы можем это сделать?

пожалуйста, дайте мне советы

Заранее спасибо !

1
nl ja de
Вы можете сохранить массив очень просто в NSUserDefault
добавлено автор TonyMkenu, источник
NSUserDefault не имеет ограничений (свободное пространство устройства)
добавлено автор TonyMkenu, источник
Если вы ждете 10 минут .. Я сейчас на телефоне. Я дам вам код. Что я использую
добавлено автор TonyMkenu, источник
нормально, но я думаю, что я не могу, потому что массив имеет много элементов, если я скопировал массив в текстовом файле, размер текстового файла станет почти 70 кб.
добавлено автор prabhu, источник
Хорошо спасибо, попытается его реализовать.
добавлено автор prabhu, источник

3 ответы

для сохранения массива в текстовый файл вы можете использовать метод - writeToFile: atomically: , для получения дополнительной информации здесь - это документация функции.

2
добавлено

Для извлечения «yourArray» из NSUserDefaults .. вы можете написать в своем контроллере:

-(id) initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {

        yourArray = [[NSMutableArray alloc] init];
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

        if (! [defaults objectForKey: [NSString stringWithFormat:@"sample"]])
        {
            //if nothing saved
            //... do whatever you want

            //Use this array if there is nothing saved
            NSLog(@"no saved array");
            NSArray *modelArray1 = @[@"New York", @"London", @"Paris"];
            yourArray=[modelArray1 mutableCopy];
        }
        else{
            NSLog(@"existing array");
            NSData *myDecodedObject = [defaults objectForKey: [NSString stringWithFormat:@"sample"]];
            yourArray =[NSKeyedUnarchiver unarchiveObjectWithData: myDecodedObject];
            NSLog(@"decode array init=%u", yourArray.count);
        }
            }
    return self;
}

для сохранения ..

-(void)saving
{
    NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];
    NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:yourArray];
    [userDefault setObject:myEncodedObject forKey:[NSString stringWithFormat:@"sample"]];
    [userDefault synchronize];

}
1
добавлено
:) Счастливое кодирование!
добавлено автор TonyMkenu, источник
конечно ... вы также можете принять один из ответов :)
добавлено автор TonyMkenu, источник
Ох .. Действительно спасибо, это мне очень поможет.
добавлено автор prabhu, источник

Лучшим выбором является [NSArray writeToFile: atomically:] , если массив содержит простые объекты. Чтобы получить массив, используйте NSArray's arrayWithContentsOfFile: (Создает и возвращает массив, содержащий содержимое файла, заданного заданным путем. + (id) arrayWithContentsOfFile: (NSString *) aPath)

0
добавлено
Прояснить «простые объекты». Классы, хранящиеся в массиве, должны поддерживать протокол NSCoding (в настоящее время его NSSecureCoding). Это поддерживает множество общих классов (например, NSString, NSNumber, NSDate и т. Д.),
добавлено автор diederikh, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.