nsuserdefault中的ios-save nsdictionary

时间:2012-12-16 10:38:06

标签: ios nsdictionary

我想在nsuserdefault中保存一个nsdictionary值null,不需要替换和删除值null

如何? 我的代码 - >不能保存在nsuserdefault中

NSMutableArray * _itemsNames;
NSString * itemsFilename;

- (void) responseArray:(NSMutableArray *)array {
    [_itemsNames setArray:array];

    [spinner stopAnimating];
    [_itemsNames writeToFile:itemsFilename atomically:YES];
    NSMutableSet *filepathsSet = [[NSUserDefaults standardUserDefaults] objectForKey:@"test"];
    [filepathsSet setByAddingObject:itemsFilename];
    [[NSUserDefaults standardUserDefaults] setObject:filepathsSet forKey:@"test"];
}

json是:(有值null)

({
  ID:11,
   name:21-12-2012,
   des:"<null>",
   url: 
     [
       {
         ID:1,
         name: "<null>"
       },
       {
         ID:2,
         name:"<null>"
       }
      ]
},
{
   ID:12,
   name:if i die young,
   des:"<null>",
   url: 
     [
       {
         ID:3,
         name: "<null>"
       },
       {
         ID:21,
         name:"<null>"
       }
      ]
})

3 个答案:

答案 0 :(得分:0)

如果你有字典myDict

然后

[[NSUserDefaults standardUserDefaults] setObject:myDict forKey:@"MyDictionary"];
仅当

myDict包含实现NSCoding

的所有对象时,才会保存它

关于你的空概念。

无需在字典中为nil保存key值 如果您尝试获取key的对象,并且在字典中没有与该key相关的任何对象,则它将返回nil。因此无需保存null

答案 1 :(得分:0)

如果您确实需要在NSDictionary中存储空值,请使用NSNull。无论如何,你可以不存储具有空值的键,然后对于[mydict objectForKey:@"keyWithNullValue"],你将获得nil

但正如我所说,如果你真的想存储null,请使用类似的东西:

NSSet *mySet = [NSSet setWithObjects:@{
    @"ID":@(11),
    @"name":@"21-12-2012",
    @"des":[NSNull null],
    @"url": @[@{
        @"ID":@(1),
        @"name": [NSNull null]
    }, @{
        @"ID":@(2),
        @"name":[NSNull null]
    }]
},@{
    @"ID":@(12),
    @"name":@"if i die young",
    @"des":[NSNull null],
    @"url": @[@{
        @"ID":@(3),
        @"name": [NSNull null]
    }, @{
        @"ID":@(21),
        @"name":[NSNull null]
    }]}, nil];

答案 2 :(得分:0)

你提到保存字典,但你要显示的只是字典数组的JSON表示。

您不需要做任何奇怪的事情,获取返回的JSON数据并将其转换为数组并将数组写入plist。将它变成一个字符串,然后尝试从中创建一个集合可能会导致问题。