我设法保存NSMutableArray在NSUserDefaults首先转换为NSData -我不处理大量的数据,只是希望数据在我关闭&在我的手机上-但数据没有显示在我的表中,我将显示它。我在加载时将NSUserDefaults写回我的数组。也许你们有人能给点提示…?在按钮操作下面,我写入NSUserDefaults和viewDidLoad方法,我将NSUserDefaults写入原始数组(toDoitems)
- (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"]];
}
有一种方法可以做到这一点
-
将编码器解码器功能添加到XYZToDoItem类中比如这个类中有两个字符串string1和string2(我没有编译这段代码,但你得到的想法)
-(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];