我有一个 iOS 应用程序,在没有 WiFi 或数据连接的情况下,它会将两个 NSMutableArray 作为对象存储在 NSUserDefaults 中。在随后的访问中,用户应该能够通过从 NSUserDefaults 检索保存的数据来将存储的数据加载到他们的表中,但不幸的是我无法这样做。 NSMutableArrays 正在存储将各种 NSString 值作为参数保存的对象。
这是将我的数据保存在我的 Singleton 类中的代码:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[DataModel sharedInstance].testResultList forKey"resultTable"];
[defaults setObject:[DataModel sharedInstance].testResults forKey"jsonTable"];
[defaults synchronize];
这是来自 UITableView 类的代码,它应该检索数据并将它们加载到表中:
- (void)viewDidLoad
{
[super viewDidLoad];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([[DataModel sharedInstance].testResults count] == 0) {
if ([defaults objectForKey"resultTable"] == nil) {
return;
}
else {
[DataModel sharedInstance].testResultList = [defaults objectForKey"resultTable"];
[DataModel sharedInstance].testResults = [defaults objectForKey"jsonTable"];
}
}
}
这是我的 cellForRowAtIndexPath() 方法:
- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"testresultcell";
ResultTableViewCell *cell = (ResultTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[ResultTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
TestResult *tResult = [[DataModel sharedInstance].testResultList objectAtIndex:indexPath.row];
cell.name.text = tResult.testTitle;
cell.date.text = tResult.dateStamp;
cell.score.text = [[DataModel sharedInstance] getScore:tResult.score];
cell.imgView.image = [UIImage imageNamed:[[DataModel sharedInstance] getImg:tResult.score]];
return cell;
}
谁能看到我做错了什么?我最初检查 NSMutableArray 的当前值是否为空。只有这样我才会去检查是否存在 NSMutableArray 的保存副本。如果是这样,那么我需要加载数组并在我的表格中显示内容。
Best Answer-推荐答案 strong>
执行此操作的典型模式如下(我通常在我的 ApplicationDelegate 中执行此操作):
// Set up some default values
NSDictionary *myDefaults = @{@"aStringDefaultKey""someString",@"aBoolKey"YES};
// Register the default values
[[NSUserDefaults standardUserDefaults] registerDefaults:myDefaults];
// Get a reference to them
NSUserDefaults *userSettings = [NSUserDefaults standardUserDefaults];
我看不到您在哪里使用 NSUserDefaults 注册了默认值。如果您不这样做,则在没有先前设置的值的情况下,它们将不会作为默认值提供。
然后您可以引用该值或使用以下方式设置该值:
// Set a value or update a value
[userSettings setObject"anotherString" forKey"aStringDefaultKey"];
[userSettings objectForKey"aStringDefaultKey"];
编辑: 如果事实证明您的 DataModel 对象(您没有为其发布任何代码)因为不符合 NSCopy 规则而无法存储,则将其序列化为 NSData可以存储在 NSDictionary 中的对象,并以这种方式进行。
关于ios - 尝试在 iOS 中显示表格内容时无法从 NSUserDefaults 加载数据,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/14106315/
|