我设法在NSUserDefaults中保存NSMutableArray,首先将其转换为NSData - 我不处理大量数据,只是希望在关闭后才能将数据放在那里。在我的手机上 - 但数据没有显示在我的表格中我将显示它。我在加载时将NSUserDefaults写回我的数组。也许你们其中一个人有提示......?在我写入NSUserDefaults的按钮操作下面,以及我将NSUserDefaults写入原始数组(toDoitems)的方法viewDidLoad
- (IBAction)unwindToList:(UIStoryboardSegue *)segue
{
XYZAddToDoItemViewController *source = [segue sourceViewController];
XYZToDoItem *item = source.toDoItem;
if (item !=nil) {
[self.toDoitems addObject:item];
NSString *error;
NSData *data = [NSPropertyListSerialization dataFromPropertyList:self.toDoitems format:NSPropertyListBinaryFormat_v1_0 errorDescription:&error];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"itemArray"];
[[NSUserDefaults standardUserDefaults] synchronize];
[self.tableView reloadData];
}
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.toDoitems = [[NSMutableArray alloc] init];
self.toDoitems = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"itemArray"]];
}
答案 0 :(得分:0)
有一种方法可以做到这一点
将编码器解码器功能添加到XYZToDoItem类 如果说你在这个类string1和string2中有2个字符串,那么这样的东西: (我没有编译这段代码,但你明白了)
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.string1 forKey:@"string1"];
[aCoder encodeObject:self.string2 forKey:@"string2"];
}
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self)
{
self.string1 = [aDecoder decodeObjectForKey:@"string1"];
self.string2 = [aDecoder decodeObjectForKey:@"string2"];
}
return self;
}
然后当您准备保存时,请执行以下操作
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self.myDataArray];
[userDefaults setObject:data forKey:@"storageName"];
// To load the data from NSUserDefaults
NSData *myData = [[NSUserDefaults standardUserDefaults] objectForKey:@"storageName"];
NSArray *temp = (NSMutableArray*)[NSKeyedUnarchiver unarchiveObjectWithData:myData];
self.myDataArray = (NSMutableArray*)[temp mutableCopy];