0

設定するときNSUserDefaults、私は最初にこのコードを使用してデフォルトを設定していました...

 NSMutableArray *array = [NSMutableArray arrayWithObjects: @"string1", @"string2", @"string3", nil];
 [[NSUserDefaults standardUserDefaults] setObject:array forKey: @"preset1"];
 [[NSUserDefaults standardUserDefaults] synchronize];

代わりにこれを使用する必要があることを学びました。

NSMutableArray *array = [NSMutableArray arrayWithObjects: @"string1", @"string2", @"string3", nil];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:array forKey:@"preset1"];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];

現在、でオブジェクトを操作する際に問題が発生していますarray。から文字列を追加/削除するために使用するコードは次のとおりですarray。最初の例で最初にデフォルトを手動で設定していたときは、正常に機能しました。これで、オブジェクトは配列から削除されません。LLDBデバッガーで配列を印刷しているときに気づきましたが、これは直前のときにarrayとして保存されています。NSCFArrayNSArray

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObjectsFromArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"preset1"]];

NSArray *stringsToRemove = @[@"string1", @"string2" ]; 

for (NSUInteger i = 0; i < stringsToRemove.count; i++) {
    [array removeObjectIdenticalTo:[stringsToRemove objectAtIndex:i]];
}

[[NSUserDefaults standardUserDefaults] setObject:array forKey: @"preset1"];
[[NSUserDefaults standardUserDefaults] synchronize];  
4

1 に答える 1

1

このコードは、2番目に説明した方法でデフォルトを初期化した後、セットアップで機能します。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSMutableArray *array = [[NSMutableArray alloc] initWithArray: [defaults objectForKey:@"preset1"]];

NSArray *stringsToRemove = [NSArray arrayWithObjects:@"string1", @"string2", nil];

for (NSString *aString in stringsToRemove) {
     [array removeObjectIdenticalTo:aString];
}

[defaults setObject:array forKey: @"preset1"];
[defaults synchronize];  
于 2012-08-08T20:17:38.407 に答える