首先,我想说我是iOS新手。我正面临一个问题。我尝试过很多东西,但没有取得任何成功。
在我的应用中,我在NSDictionay
文件中声明了.pch
,如下所示:
#define Default_InCategory @{@[@"Other",@"other_icon.png"], @[@"Salary",@"salary_icon.png"]]}
这些是类别的一些默认值。我还有一个选项,用户可以从中选择此类别中的自定义值。由于某些限制,我将New Custom
类别存储在另一个名称为Custom_InCategory
且与上述格式相同的单独密钥中。但我没有取得任何成功。我正在尝试使用以下代码:
#define USERDEFAULT [NSUserDefaults standardUserDefaults]
NSMutableDictionary *tempDic =[[NSMutableDictionary alloc]initWithDictionary:[USERDEFAULT objectForKey:Custom_InCategory]];
NSArray *tempArr =@[@"CategoryName",@"imageName"];
[tempDic setObject:tempArr forKey:@"newCat"];
[USERDEFAULT setObject:tempDic Custom_InCategory];
[USERDEFAULT synchronize];
答案 0 :(得分:0)
此代码可以正常工作:
NSMutableDictionary *tempDic = [[NSMutableDictionary alloc]init];
NSArray *tempArr =@[@"CategoryName",@"imageName"];
[tempDic setObject:tempArr forKey:@"newCat"];
NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
[myDefaults setObject:tempDic forKey:@"myKey"];
NSLog(@"%@",[myDefaults objectForKey:@"myKey"]);
在控制台中打印:
{
newCat = (
CategoryName,
imageName
);
}
根据评论更新:
您应该使用不同的键来存储不同的对象,例如newCat, newCat1, newCat2
等,或者您可以使用mutablearray
而不是字典,并且可以添加多个对象并通过它的索引检索它。
答案 1 :(得分:0)
如果您要存储单个键值配对字典,那么我们可以直接存储在UserDefaults中。
如果您的词典是词典集合,那么在存储时会出错。
对于这种情况,您需要将Dictionary存档到数据中,然后将其存储到UserDefaults。当您需要字典时,请将数据取消归档到Dictionary,如下所示:
将字典存档到数据:
.event_silver {
background-color: silver;
}
将此数据存储到UserDefaults,如下所示:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:yourDictionary];
从UserDefaults获取数据:
[[NSUserDefaults standardUserDefaults]setObject:data forKey:@"yourData"];
从数据中取消归档词典
NSData *archivedData = [[NSUserDefaults standardUserDefaults]objectForKey:@"yourData"];
希望有所帮助......
答案 2 :(得分:0)
快速版本:
在UserDefaults中保存一个词典数组
func save(arr: NSArray) {
guard let data = try? NSKeyedArchiver.archivedData(withRootObject: arr , requiringSecureCoding: false) as Data
else { fatalError("Can't encode data") }
UserDefaults.standard.set(data, forKey: "ReferredBy")
}
从UserDefaults获取字典数组
func get() -> NSArray {
if let unarchivedObject = UserDefaults.standard.object(forKey: "ReferredBy") as? Data {
guard let nsArray = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(unarchivedObject) as! NSArray else {
return NSArray()
}
return nsArray
}
return NSArray()
}