2

WiFi またはデータ接続がない場合に2NSMutableArrayをオブジェクトとして格納する iOS アプリがあります。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 *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)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保存されたコピーが存在するかどうかを確認するために行って確認するのは、そのときだけです。その場合は、配列をロードして、その内容をテーブルに表示する必要があります。

4

1 に答える 1

4

これを行うための典型的なパターンは次のとおりです (通常は 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"];

EDIT:そして、NSCopyルールに準拠していないためにDataModelオブジェクト(コードを投稿していない)を保存できないことが判明した場合は、それをNSDictionaryに保存できるNSDataオブジェクトにシリアル化し、そのようにしてください。

于 2012-12-31T22:04:24.507 に答える