objective-c - 从 NSUserDefaults 中的数组中删除对象

标签 objective-c ios nsuserdefaults

设置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现在被存储为 NSCFArray当它只是一个NSArray时之前。

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];  

最佳答案

按照您描述的第二种方式初始化默认值后,此代码适用于您的设置:

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];  

关于objective-c - 从 NSUserDefaults 中的数组中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11872191/

相关文章:

ios - UITableViewCell 中的 NSLayoutConstraint 中断

ios - 使用 UITabBar 和 UINavigationBar

ios - pod 安装失败,错误为 : Library (from `../` )` required by ` Podfile` when pod install in iOS

ios - 从 UserDefualts 设置 UILabel

ios - 如何添加到已保存的 NSUserDefault?

iphone - 在 Objective-C 中创建一个 NSString

ios - Xcode 7 找不到有关崩溃的行或方法的详细信息

ios - 带索引的 NSArray 递归搜索

ios - 通过 iPhone IOS 测试 React Native

ios - 应用程序在NSUserDefault数据删除期间崩溃