OStack程序员社区-中国程序员成长平台

标题: ios - 尝试在 iOS 中显示表格内容时无法从 NSUserDefaults 加载数据 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 00:14
标题: ios - 尝试在 iOS 中显示表格内容时无法从 NSUserDefaults 加载数据

我有一个 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-推荐答案


执行此操作的典型模式如下(我通常在我的 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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4