如何使用NSUserDefault将{NSArray'存储在NSDictionary中

时间:2016-05-09 12:19:38

标签: ios objective-c nsdictionary nsuserdefaults

首先,我想说我是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];

3 个答案:

答案 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()
}