将plite文件_整数中的NSMutable字典数据保存为键

时间:2012-04-12 13:17:21

标签: iphone objective-c plist nsmutabledictionary

我目前正在尝试在plist文件中保存NSMutabledictionary键和对象。我的键是整数,所以我使用NSNumber将它们放入writeToFile函数中。

即使进行了这项更改,我也无法在plist中找到我保存的任何数据。我想NSNumber指针存在问题,因为当我使用字符串时它会起作用。

你知道我的代码中缺少什么吗?

    NSMutableDictionary *dictionnaireNoms = [[NSMutableDictionary alloc] initWithCapacity:40];
    NSNumber *nombre = [[NSNumber alloc] initWithInteger:dictionnaireNoms.count];        
    NSString *nomCommerce = text.text;
    [dictionnaireNoms setObject:nomCommerce forKey:nombre];

    //2. Sauvegarde du nom dans un fichier
    [saveDicoCommerce enregisterNom:dictionnaireNoms];


- (void)enregisterNom:(NSMutableDictionary*)nom
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSLog(@"%@", documentsDirectory);
    NSString *pathNom = [documentsDirectory stringByAppendingPathComponent:@"NomsDeCommerces.plist"];
    if (!documentsDirectory) {
        NSLog(@"Documents directory not found!");
        return;
    }
    [nom writeToFile:pathNom atomically:YES];
    if(![[NSFileManager defaultManager] fileExistsAtPath:pathNom])
    {
        NSLog(@"file not found");
        return;
    }

}

2 个答案:

答案 0 :(得分:3)

NSDictionary只能直接写自己,如果它只包含字符串键。它确认您尝试使用

编写
[[NSPropertyListSerialization dataWithPropertyList:nom format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil] writeToFile:pathNom atomically:NO];`

输出结果为:

  

属性列表格式无效:200(属性列表词典可能只有CFS字符串的键,而不是'CFNumber')

但是,如果使用NSDictionary对其进行序列化,则可以存储包含NSNumber个密钥的NSCoding个对象。替换这个:

[nom writeToFile:pathNom atomically:YES];

使用:

[NSKeyedArchiver archiveRootObject:nom toFile:pathNom];

要阅读创建的文件,请使用:

NSDictionary *nom2 = [NSKeyedUnarchiver unarchiveObjectWithFile:pathNom];

有关存档的详细信息,请参阅Archives and Serializations Programming Guide

答案 1 :(得分:0)

为什么要分配NSNumber?试试这个[your_dictionary setValue:[NSNumber numberWithInt:your_int]];