Ios 使用NSUserDeTault保存数据并在手机重新启动后加载无法正常工作

Ios 使用NSUserDeTault保存数据并在手机重新启动后加载无法正常工作,ios,iphone,nsmutablearray,Ios,Iphone,Nsmutablearray,我设法将NSMutableArray保存在NSUserDefaults中,方法是首先将其转换为NSData—我不处理大量数据,只希望在关机后和手机上都有这些数据—但数据不会显示在我的表中,我将在其中显示数据。加载时,我将NSUserDefaults写回数组。也许你们中有人有个暗示。。。?下面是写入NSUserDefaults的按钮操作和将NSUserDefaults写入原始数组toDoitems的方法viewDidLoad - (IBAction)unwindToList:(UIStoryboa

我设法将NSMutableArray保存在NSUserDefaults中,方法是首先将其转换为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"]];
}

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

将编码器-解码器函数添加到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];

这不应该:[self.tableView重载数据];是否显示在XYZAddToDoItemViewController中?设置后:self.toDoitems当然这应该会回答并关闭它…我尝试了[self.tableView reloadData]的可能副本;在视图中,加载但没有帮助。如何检查NSUserDefaults中是否存在实际数据?