我正在尝试在设备上保存NSMutableArray,但每次重新加载应用程序时都会删除数据。
我尝试使用NSUserDefaults,但问题仍然存在
这是我正在使用的代码
-(void) addingData{
[data addObject:theBarcodeString]; //data is the NSMutableArray
[mainTableView reloadData]; //this is a UITableView where the data from the NSMutableArray is populated
[self endText];
history=[NSUserDefaults standardUserDefaults];
[history setObject:data forKey:@"history" ];
}
这是我加载数据的地方
- (void)viewDidLoad
{
...
if (data == nil) {
data = [[NSMutableArray alloc] init]; //onload it always goes to his line
else {
data=[[NSUserDefaults standardUserDefaults] objectForKey:@"history" ];
}
...
}
我做错了什么?
答案 0 :(得分:3)
您不应该测试数据== nil。相反,只需:
data = [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults]
objectForKey:@"history"]];
请注意,您必须稍后再发布。
如果您希望data
成为可变数组,必须使用:
data = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"history"];
如果尝试在不使用mutableArrayValueForKey的情况下对数据执行变异操作,则会发生崩溃,因为从NSUserDefaults返回的所有对象都是不可变的。
答案 1 :(得分:0)
synchronize 将对持久域的任何修改写入磁盘 并将所有未修改的持久域更新为磁盘上的内容。
- (BOOL)同步
如果数据已成功保存到磁盘,则返回值YES,否则返回 NO。
所以你必须添加[history synchronize]
来强制写默认值
修改:来自Docs
因为此方法会定期自动调用, 只有在您不能等待自动时才使用此方法 同步(例如,如果您的应用程序即将退出)或 如果要将用户默认值更新为磁盘上的内容,即使如此 你没有做任何改变。
因此,如果您想立即保存更改,请致电[history synchronize]
。