使用NSUserDetaults保存数据并在手机重启后加载不起作用

时间:2014-07-16 16:06:14

标签: ios iphone nsmutablearray

我设法在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"]];
}

1 个答案:

答案 0 :(得分:0)

有一种方法可以做到这一点

  1. 将编码器解码器功能添加到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;
    }
    
  2. 然后当您准备保存时,请执行以下操作

    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];