Как сохранить массив в NSUserDefaults? - PullRequest
0 голосов
/ 02 августа 2010

Я хотел бы сохранить массив контроллеров представления в NSUserDefaults, но я не уверен, как:

[[NSUserDefaults standardUserDefaults] setObject:tabBarController.viewControllers forKey:@"tabOrder"];

Когда я читаю вышеупомянутую строку, мой tabBarController.viewControllers становится пустым.

Ответы [ 2 ]

2 голосов
/ 02 августа 2010

Контроллеры представления в этом массиве не сериализуемы и, следовательно, не будут сохранены в NSUserDefaults.

Из справочника NSUserDefaults :

Параметром value могут быть только объекты списка свойств: NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary. Для объектов NSArray и NSDictionary их содержимое должно быть объектами списка свойств. См. «Что такое список свойств?» В Руководстве по программированию списка свойств.

Вы должны повторно инициализировать ваши контроллеры представления при следующей загрузке. Однако вы можете сериализовать их данные в NSUserDefaults для некоторых пользовательских полей.

0 голосов
/ 01 мая 2014

прежде чем вы сможете сохранить объект с помощью NSUserDefault ..

[[NSUserDefaults standardUserDefaults] setObject: [NSKeyedArchiver archivedDataWithRootObject: self.flipsideView.zoznamFunkcii] forKey: @ "NSMutableArray];[[NSUserDefaults standardUserDefaults] синхронизируется];

и вы применяете метод кодирования и декодирования

  • (id) initWithCoder: (NSCoder *) decoder {if (self = [super)init]) {self.toolResult = [decoder decodeObjectForKey: @ "obj1"];self.toolNotes = [decoder decodeObjectForKey: @ "obj2"];

    } return self;}

  • (void) encodeWithCoder: (NSCoder *) encoder {[encoder encodeObject: self.toolResult forKey: @ "obj1"];[encoder encodeObject: self.toolNotes forKey: @ "obj2"];

}

сохранение ваших данных в NsuserDefault Когда вы получаете данные из NsUserDefault, вы используете как [NSKeyedUnarchiver unarchiveObjectWithData: [[NSUserDefaults standardUserDefaults] objectForKey: @ "NSMutableArray"]];

...